以下声明有什么区别?
结构体 *ptr1=(结构体*)malloc(4*sizeof(结构体));
结构体 (*ptr1)[4]=(结构体*)malloc(sizeof(结构体));
哪个更好用?
最佳答案
首先让我们清理一下这些调用。 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 );
这为 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 结构体数组分配空间。每个元素都可以作为 p[i][j]
进行访问。
关于c - struct Complex (*ptr1)[4] 和 struct Complex *ptr1 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38393918/