【发布时间】:2013-08-17 15:13:38
【问题描述】:
我有一个结构定义为:
struct smth
{
char a;
int b[];
};
当我在这个结构上调用sizeof 和offsetof 时:
cout << sizeof(struct smth) << endl;
cout << offsetof(struct smth, b) << endl;
输出是:
4
4
为什么stuct的大小为4,char使用1字节,int数组的偏移量为4? 为什么会有某种填充? 另外,为什么 int 数组根本不占空间?
【问题讨论】:
-
你的意思是
offsetof(struct smth, b),对吧? -
@CarlNorum 是的,我愿意。已编辑。
-
是 C 还是 C++?它们是不同的。
-
@YuHao 我专门要求 C++,但添加了 c 标签,以便人们也可以使用该标签找到它。它们有何不同 w.r.t.这个问题的答案?
-
@biox6 您应该只使用相对的标签来标记问题。 C 和 C++ 可能在许多领域是相似的,但它们在更多方面是不同的。在这个问题中,例如,可变长度数组仅在 C 中有效,在 C++ 中无效。
标签: c++ arrays sizeof offsetof