在sizeof()中取消引用指针类型

tor*_*gen 2 c syntax types pointers dereference

我有以下结构:

typedef struct _foo_t {
    int bar;
    float buzz;
    char quux[40];
} *const foo_t;
Run Code Online (Sandbox Code Playgroud)

有没有办法获得结构的大小,就像通过它完成sizeof(struct _foo_t),但只使用名称foo_t?我试过了sizeof(*foo_t),但那不编译.

b4h*_*and 6

我不相信你可以直接这样做.如果要执行此操作,则需要定义中间typedef:

typedef struct _foo_t {
    int bar;
    float buzz;
    char quux[40];
} foo_t;

typedef foo_t *const foo_tp;

// sizeof(foo_t) should work
Run Code Online (Sandbox Code Playgroud)

在C中取消引用类型并不真正有意义.您可以取消引用变量,但不能取消引用类型.在C++中,您可以使用模板执行这些类型的操作,但由于您指定了C标记,因此不适用.

您还可以声明一个适当类型的虚拟变量来调用sizeof表达式:

foo_tp f;
// sizeof(*f) should work
Run Code Online (Sandbox Code Playgroud)

  • 不需要2个typedef.最后一行`} foo_t,*const foo_tp;`会这样做.NB,以_ _t`结尾的类型在标准中保留供标准库使用. (3认同)