我试图了解这两个片段之间的区别。他们俩都可以正常工作。
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>
。