结构成员的大小

时间:2011-11-03 20:23:45

标签: c

我有一个类似

的结构
struct T {
    int first, int second
} Tstruct;

现在我想在某处定义

pointer = struct.base + sizeof(Tstruct.second);

但我收到错误告诉我把“)”改为“。”这是我的错误吗? Sizeof(Tstruct)正在工作......谢谢。

3 个答案:

答案 0 :(得分:1)

您不能这样做,但您可以使用sizeof(int)甚至sizeof(struct.second)(假设struct是具有非法名称的struct T实例)。

sizeof对类型和表达式进行操作。 sizeof(Tstruct.second)既不是类型也不是有效表达式。但是,给定Tstruct的有效实例,以下是一个类型为Tstruct::second的表达式:

Tstruct properly_named_struct;
sizeof(properly_named_struct.second);

答案 1 :(得分:1)

根据我在您的问题中看到的内容,您可能希望保证存在offsetof宏。

char* pointer = (void*)&Tstruct;
pointer += offsetof(struct T, second);

它还有一个优点,就是可以在字段之间进行填充。

如果你真的想在你的问题中做你说的话,如果你有C99你可以使用复合文字

pointer += sizeof ((const struct T){ 0 }).second;

这里((const struct T){ 0 })是结构类型的临时版本,但是任何符合C99标准的编译器都会优化谁的创建。

答案 2 :(得分:0)

sizeof(TStruct.second)完全有效。

struct.base不是因为struct是C中的保留关键字,应该指向结构的成员名称。