C typedef指针的大小

C typedef指针的大小,c,pointers,struct,typedef,sizeof,C,Pointers,Struct,Typedef,Sizeof,我有一个定义如下的结构: typedef struct my_struct { int numbers[10]; } *my_struct; 有办法知道它的大小吗 sizeof(my_struct);// return size of a pointer 结构类型本身拼写为struct,因此您可以说: sizeof (struct my_struct) 如果没有为结构命名,这将不起作用,这是可能的: typedef struct { int numbers[10]; } * foo

我有一个定义如下的结构:

typedef struct my_struct
{
    int numbers[10];
}
*my_struct;
有办法知道它的大小吗

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

结构类型本身拼写为
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与结构定义分开,指针是显式的。

sizeof(*my_struct)
sizeof(struct my_struct)
。另请参见问题-剧透警报:简短的回答是“否”(除非它们可能是函数指针)。@JonathanLeffler:呃。。。你测试过了吗
my_struct
是一种类型,而不是一个变量。@KerrekSB:No.
sizeof(*my_struct)
版本在一段时间内不起作用(除非你用
my_struct my_struct=NULL;
或类似的奇怪东西射中了自己的脚)。我的错!几个小时前我就应该被安眠了-这是一个草率的借口,但必须这样做。sizeof(struct my_struct)对我有效,谢谢Jonathan Leffler。好奇-使用无标记指针
typedef
,除非你有一个可以引用的变量,否则无法找到结构的大小。这只是另一个不输入def指针的原因——好像你真的需要另一个。这也意味着无法创建该类型的直接实例-您只能创建指针。@JonathanLeffler:是的,编写它完全是一件愚蠢的事情。我已经添加了另一个交叉引用这个问题,并讨论了
typedef struct{…details…}*信息及其分支。