这在C中是合法的吗?
struct Doubles
{
double a,b,c;
};
void foo(struct Doubles* bar)
{
double* baz = (double*)bar;
baz[0]++;
baz[1]++;
baz[2]++;
}
我知道它"工作"在MSVC 2010上,但我不知道它是否合法,或者不同的布局是否会导致UB。
答案 0 :(得分:5)
这会导致未定义的行为。结构的布局并非完全由标准规定。例如,可能有填充。
答案 1 :(得分:4)
允许编译器对结构进行填充/打包,但严格来说,您的代码不是100%安全的。不过,它适用于大多数实现。