gpt4 book ai didi

c - struct Complex (*ptr1)[4] 和 struct Complex *ptr1 之间的区别

转载 作者:行者123 更新时间:2023-11-30 21:08:28 26 4
gpt4 key购买 nike

以下声明有什么区别?

  1. 结构体 *ptr1=(结构体*)malloc(4*sizeof(结构体));
  2. 结构体 (*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 元素数组分配空间,或者更简单地为 Nx4 结构体数组分配空间。每个元素都可以作为 p[i][j] 进行访问。

关于c - struct Complex (*ptr1)[4] 和 struct Complex *ptr1 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38393918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com