【问题标题】:Pointer as a structure variable in c指针作为c中的结构变量
【发布时间】:2017-10-27 10:26:18
【问题描述】:

当我使用这样的代码时:

typedef struct {
        int x;
        int *pInt;
} tData;

tData *ptData = malloc(sizeof(tData));   

如果我理解正确,我分配了大小为tData 的内存,并将分配的内存的地址返回到指针*ptData

但是如果我使用这个代码呢:

typedef struct {
        int x;
        int *pInt;
} *tData;

如果我想为这个结构分配内存,我需要一个结构名称吗?因为对我来说,如果我像malloc(sizeof(*tData)); 一样分配内存,在我看来我只是为指针分配内存,而不是为结构本身分配内存。当我想引用这个结构中的数据时,是否需要使用指向结构的指针?
这让我有点困惑,我找不到我正在寻找的答案。
谢谢你的解释!

【问题讨论】:

  • 这就是为什么不要 typedef 指针!!
  • 一些讨论here。显然你应该只 typedef 指针像这样“如果你的代码永远不会取消引用指针”,
  • 作为骗子关闭,如果这不能回答您的问题,请告诉我。
  • 它没有。他们在那里讨论了我发布的第一种形式的代码。我在理解第二个方面有问题。在这种情况下,我无法避免它..
  • 您可以使用您提到的结构名称,或者您可以 typedef 结构类型和指向结构类型的指针,如 typedef struct { ... } tData, *ptData;

标签: c pointers struct


【解决方案1】:

这是应该避免创建指针的类型别名的原因之一。

至于如何使用,不要将type传递给sizeof操作符,而是使用变量。比如

typedef struct {
        int x;
        int *pInt;
} *tData;

tData ptData = malloc(sizeof *ptData);  // Allocate memory for one structure

【讨论】:

  • 请问,如果我将其更改为typedef struct data {...} *tData;struct data *pData; 的含义是否与tData pData; 相同?
  • @SevO 是的。
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2021-04-06
相关资源
最近更新 更多