我有一个类似
的结构struct T {
int first, int second
} Tstruct;
现在我想在某处定义
pointer = struct.base + sizeof(Tstruct.second);
但我收到错误告诉我把“)”改为“。”这是我的错误吗? Sizeof(Tstruct)正在工作......谢谢。
答案 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中的保留关键字,应该指向结构的成员名称。