struct complex(* ptr1)[4]和struct complex * ptr1之间的区别

时间:2016-07-15 10:33:51

标签: c

以下声明之间有什么区别?

  1. struct complex *ptr1=(struct complex*)malloc(4*sizeof(struct complex));
  2. struct complex (*ptr1)[4]=(struct complex*)malloc(sizeof(struct complex));
  3. 哪个更好用?

1 个答案:

答案 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]访问。