可以将一个双精度结构转换为C中的双精度数组吗?

时间:2014-06-19 20:53:31

标签: c struct casting

这在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。

2 个答案:

答案 0 :(得分:5)

这会导致未定义的行为。结构的布局并非完全由标准规定。例如,可能有填充。

答案 1 :(得分:4)

允许编译器对结构进行填充/打包,但严格来说,您的代码不是100%安全的。不过,它适用于大多数实现。