C 结构复合体(*ptr1)[4]和结构复合体*ptr1之间的差异
以下声明之间有什么区别C 结构复合体(*ptr1)[4]和结构复合体*ptr1之间的差异,c,C,以下声明之间有什么区别 struct complex*ptr1=(struct complex*)malloc(4*sizeof(struct complex)) struct complex(*ptr1)[4]=(struct complex*)malloc(sizeof(struct complex)) 使用哪个更好?让我们先清理一下这些调用。C不要求您强制转换malloc的结果,这样做被认为是不好的做法(另一方面,C++确实需要强制转换,但您不应该在C++中使用malloc)。此外,还可以
struct complex*ptr1=(struct complex*)malloc(4*sizeof(struct complex))代码>
struct complex(*ptr1)[4]=(struct complex*)malloc(sizeof(struct complex))代码>
使用哪个更好?让我们先清理一下这些调用。C不要求您强制转换
malloc
的结果,这样做被认为是不好的做法(另一方面,C++确实需要强制转换,但您不应该在C++中使用malloc
)。此外,还可以将解引用的目标作为操作数传递给sizeof
,因此任何malloc
调用的基本形式如下
T *p = malloc( sizeof *p * N );
这为类型为T
的N
对象分配了足够的空间,并将结果指针指定给p
。可以使用p[i]
访问每个元素
那么,在第一种情况下,你正在做什么
struct complex *ptr1 = malloc( sizeof *ptr1 * 4 );
这为类型为struct complex
的4个对象留出了空间,每个对象都作为ptr1[i]
访问。这是更简单的情况
struct complex (*ptr1)[4] = malloc( sizeof *ptr1 );
这为类型为struct complex[4]
的1个对象留出了空间(即struct complex
的4元素数组),并将结果指针分配给ptr1
。每个元素将作为(*ptr1)[i]
或ptr1[0][i]
访问。只有当您试图为结构复合体的二维数组分配空间时,才会使用此表单:
struct complex (*p)[4] = malloc( sizeof *p * N );
这为
N
4元素数组分配了空间,或者更简单地说是N
x4数组,属于struct complex
。每个元素将作为p[i][j]
欢迎使用堆栈溢出。数字2是指向数组的指针。它令人困惑,难以使用,而且很少有用。实际上,您总是想要数字1。在后者中,您保留的空间太少:对于1结构复合体,而不是4结构复合体+前面提到的所有内容的数组。在第一个表达式中,我们可以使用。运算符,在第二个表达式中,我们可以使用->运算符as,1访问。int i;对于(i=0;iimag}。这是如何在内存中完成的。第二个,大小是否错误?