以下声明之间有什么区别?
struct complex *ptr1=(struct complex*)malloc(4*sizeof(struct complex));
struct complex (*ptr1)[4]=(struct complex*)malloc(sizeof(struct complex));
哪个更好用?
答案 0 :(得分:0)
首先让我们稍微清理一下这些电话。 C不要求你施放malloc
的结果,这样做被认为是不好的做法(另一方面,C ++ 需要演员,但你不应该这样做在C ++中使用malloc
。此外,您可以将解除引用的目标作为操作数传递给sizeof
,因此任何malloc
调用的基本形式都是
T *p = malloc( sizeof *p * N );
这为N
类型的T
对象分配了足够的空间,并将结果指针分配给p
。可以使用p[i]
访问每个元素。
所以,在第一种情况下,你正在做
struct complex *ptr1 = malloc( sizeof *ptr1 * 4 );
这为4个struct complex
类型的对象留出空间,每个对象都以ptr1[i]
的形式访问。这是一个更简单的案例。
struct complex (*ptr1)[4] = malloc( sizeof *ptr1 );
这为1个struct complex [4]
类型的对象(IOW,struct complex
的4元素数组)留出空间,并将结果指针分配给ptr1
。每个元素都将作为(*ptr1)[i]
或 ptr1[0][i]
进行访问。如果您尝试为struct complex
的二维数组分配空间,那么您真的只使用此表单:
struct complex (*p)[4] = malloc( sizeof *p * N );
这为N
4元素数组分配空间,或者更简单地为N
x4数组分配空间struct complex
。每个元素都将作为p[i][j]
访问。