【问题标题】:sizeof typedef pointersizeof typedef 指针
【发布时间】:2017-09-04 10:01:36
【问题描述】:

我有一个这样定义的结构:

typedef struct my_struct
{
    int numbers[10];
}
*my_struct;

有没有办法知道它的大小?

sizeof(my_struct);// return size of a pointer

【问题讨论】:

  • sizeof(*my_struct); sizeof(struct my_struct)。另请参阅问题Is it a good idea to typedef pointers? — 剧透警告:简短的回答是“否”(除非它们是函数指针,也许)。
  • @JonathanLeffler:呃……你测试过吗? my_struct 是一种类型,而不是变量。
  • @KerrekSB:不。sizeof(*my_struct) 版本不起作用——期间(好吧,除非你用 my_struct my_struct = NULL; 或类似的奇怪的东西在脚上射击自己,否则不会)。我的错!我应该在几个小时前睡觉——这是一个草率的借口,但它必须这样做。
  • sizeof(struct my_struct) 为我工作,谢谢乔纳森·莱夫勒。

标签: c pointers struct typedef sizeof


【解决方案1】:

结构体类型本身是用struct拼写的,所以你可以说:

sizeof (struct my_struct)

如果你没有给你的结构一个名字,这是不可能的:

typedef struct { int numbers[10]; } * foo;  /* struct type has no name */
foo p = malloc(1000);
p->numbers[3] = 81;

我想说所有这些都是糟糕的代码,毫无理由地过于简洁。就此而言,我只会保持所有名称的唯一性,并命名所有内容,而不是别名指针。例如:

typedef struct my_struct_s my_struct;

my_struct * create_my_struct(void);
void destroy_my_struct(my_struct * p);

struct my_struct_s
{
    int numbers[10];
};

每样东西都有一个唯一的名字,typedef 与 struct 定义是分开的,并且指针是显式的。

【讨论】:

  • Curious — 使用无标记指针 typedef,除非您有可以引用的变量,否则无法找到结构的大小。不使用 typedef 指针的另一个原因——好像你真的需要另一个。这也意味着无法创建该类型的直接实例——您只能创建指针。
  • @JonathanLeffler:是的,写起来完全是一件愚蠢的事情。
  • 我在Is it a good idea to typedef pointers 中添加了另一个answer,它交叉引用了这个问题并讨论了typedef struct { …details… } *Information; 及其后果。
猜你喜欢
  • 2019-07-20
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多