【发布时间】:2016-05-03 13:17:56
【问题描述】:
在这样的定义中
typedef struct
{
myType array[N];
} myStruct;
myStruct obj;
我可以一直假设([编辑]假设会发生正确的转换,这不是这里问题的重点[/编辑])
(&obj == &obj.array[0])
将返回 TRUE 还是我应该担心编译器会引入额外的填充来满足 myType 对齐要求?理论上这不应该发生,因为结构只有一个字段,但我对此并不完全确定。
【问题讨论】:
-
C 和 C++ 是 不同的 语言,比较会产生两种不同的类型。但是它们都没有一个名为
TRUE的标准常量或宏。 -
如果你想引用数组,我建议使用
obj.array,如果你想引用数组中的第一个元素,我建议使用obj.array[0]。使用obj访问数组对于外人来说会更难理解。 -
不确定 C 但在 C++ 中,第一个成员变量之前不能有填充。
-
即使是C,第一个成员变量之前也没有填充
-
&obj == &obj[0]格式不正确(类型不匹配)。要么你在用伪代码说话,要么将两者都转换为void *进行比较。
标签: c++ c compilation