C-动态内存分配和指针



我试图了解这两个片段之间的区别。他们俩都可以正常工作。

int rows = 4;
int **p = malloc(rows * sizeof(int **)); //it works without type casting

int**p = (int **) malloc(rows * sizeof(int*)); // using casting method.

sizeof(int**)是什么意思?

要分配foo_t s数组,标准模式是其中之一:

foo_t *p = malloc(count * sizeof(foo_t));
foo_t *p = malloc(count * sizeof(*p));

您要么说"给我 count 大小 s 的项目,其中大小为 sizeof(foo_t)sizeof(*p)。它们等效,但第二个更好,因为它避免了两次编写foo_t。(这样,如果将foo *p更改为bar *p,则不记得将sizeof(foo_t)更改为sizeof(bar_t)。)

so,要分配int *的数组,将foo_t替换为int *,产生:

int **p = malloc(count * sizeof(int *));
int **p = malloc(count * sizeof(*p));

请注意,正确的大小为sizeof(int *),而不是sizeof(int **)。两颗星太多了。因此,您编写sizeof(int **)的第一个片段是错误的。它似乎有效,但这只是运气。

还请注意,我不包括(int **)铸件。演员阵容会起作用,但是铸造malloc()的回报值是一个坏主意。演员是不必要的,可能会隐藏一个微妙的错误*。有关完整的解释,请参见链接的问题。


*,即,忘记了#include <stdlib.h>

相关内容

  • 没有找到相关文章

最新更新