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

anj*_*ruu 4 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]++;
}
Run Code Online (Sandbox Code Playgroud)

我知道它在MSVC 2010上"有效",但我不知道它是否合法,或者不同的布局是否会导致UB.

Dav*_*nan 5

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