问:仍然是一个有关sizeof的有关问题
问:仍然是一个有关sizeof的问题
问大家一个让我头疼的问题,希望不是钻牛角尖了。
#include <stdio.h>
struct a
{
struct b
{
int c;
char d;
};
};
void main()
{
int p;
struct a a1;
p=sizeof(a1);
printf("%d\n",p);
}
上述代码在vc6.0中,后缀名为.c时结果为8,可是后缀名为.cpp时结果为1.请别告诉我怎么变成8,我想问的是为什么.cpp编译就是1了。 谢谢大家了。
ps:好像我零分啊,不知能不能给分。
------解决方案--------------------
上述代码在vc6.0中,后缀名为.c时结果为8
----------------------------
“c文件输出8”,这个应该是vc的bug,因为struct b只是struct a内部的一个声明,而没有定义任何变量。
同样的code,在gcc下运行,输出的结果是0。
------解决方案--------------------
得出8是因为内在对齐的原因.在结构体里int c占了4个字节.char d占了一个字节.但是为需要加快程序运行速度一般编译器都会把这些数据进行内存对齐.因为在32位的计算机上.cpu存取一个字的速度是最快的.所以这里char d会被扩展成4个字节.这样两个变量的字节数相加刚好是8.
但当楼主保存为.cpp文件编译时.编译器把该文件当做c++来对待.而在C++中struct的功能与class是一样的(除了唯一的默认访问权限不一样).这样楼主的程序就可以理解为.
问大家一个让我头疼的问题,希望不是钻牛角尖了。
#include <stdio.h>
struct a
{
struct b
{
int c;
char d;
};
};
void main()
{
int p;
struct a a1;
p=sizeof(a1);
printf("%d\n",p);
}
上述代码在vc6.0中,后缀名为.c时结果为8,可是后缀名为.cpp时结果为1.请别告诉我怎么变成8,我想问的是为什么.cpp编译就是1了。 谢谢大家了。
ps:好像我零分啊,不知能不能给分。
------解决方案--------------------
上述代码在vc6.0中,后缀名为.c时结果为8
----------------------------
“c文件输出8”,这个应该是vc的bug,因为struct b只是struct a内部的一个声明,而没有定义任何变量。
同样的code,在gcc下运行,输出的结果是0。
------解决方案--------------------
得出8是因为内在对齐的原因.在结构体里int c占了4个字节.char d占了一个字节.但是为需要加快程序运行速度一般编译器都会把这些数据进行内存对齐.因为在32位的计算机上.cpu存取一个字的速度是最快的.所以这里char d会被扩展成4个字节.这样两个变量的字节数相加刚好是8.
但当楼主保存为.cpp文件编译时.编译器把该文件当做c++来对待.而在C++中struct的功能与class是一样的(除了唯一的默认访问权限不一样).这样楼主的程序就可以理解为.
- C/C++ code
lude <stdio.h > class a { class b { int c; char d; }; }; void main() { int p; a a1; //就是这里 p=sizeof(a1); printf("%d\n",p); }