好的我碰到一個奇怪的東西,也許有人可以解釋它。 源代碼是(C++ 11):爲什麼sizeof給出錯誤的答案
#include <stdio.h>
struct xyz_ {
float xyz[3];
float &x = xyz[0];
float &y = xyz[1];
float &z = xyz[2];
};
int main(int argc, char *argv[])
{
xyz_ xyz;
xyz.x = 0;
xyz.y = 1;
xyz.z = 2;
xyz.xyz[1] = 1;
printf("as array %f %f %f\n",xyz.xyz[0],xyz.xyz[1],xyz.xyz[2]);
printf("as elements %f %f %f\n",xyz.x,xyz.y,xyz.z);
int sizexyz = sizeof(xyz);
int sizefloat = sizeof(float);
printf("float is %d big, but xyz is %d big\n",sizefloat,sizexyz);
return 0;
}
輸出爲:
as array 0.000000 1.000000 2.000000
as elements 0.000000 1.000000 2.000000
float is 4 big, but xyz is 24 big
因此,結構工程,我所期望的,但尺寸的兩倍大,因爲它應該是。在結構中使用字符而不是浮點數會在運行時出現段錯誤。 我想使用struct xyz_作爲浮點數組或單個浮點元素。
我看到你是縮進代碼的粉絲 –
'使用字符給出段錯誤'不知道這是什麼意思。 – dxiv
爲什麼你認爲24是錯誤的大小?我不會感到驚訝,如果它是40. –