当前位置:  开发笔记 > 编程语言 > 正文

为什么sizeof给出了错误的答案

如何解决《为什么sizeof给出了错误的答案》经验,为你挑选了1个好方法。

好吧,我遇到了一个古怪,也许有人可以解释它.源代码是(c ++ 11):

?#?include? 
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

所以结构按照我的预期工作,但尺寸是它应该的两倍.在结构中使用chars而不是float会在运行时产生段错误.我想使用struct xyz_作为浮点数组或单个浮点元素.



1> M.M..:

这是未指定的引用是否需要存储.在这种情况下,您的输出表明您的编译器已决定使用存储来实现引用x,y以及z.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有