C++里,一个类的成员在内存里面按照顺序排列吗?

来源:百度知道 编辑:UC知道 时间:2024/06/06 07:12:46
C++里,一个类的成员在内存里面按照顺序排列吗?

不一定

如果没有指针的话。是顺序排放的。
立刻动手写一小段测试代码就知道了:
int main(int argc, char ** argv)
{
int i;
double x = 123456789.123456789;
unsigned char* ptr = (unsigned char*)&x;
for(i=0; i<sizeof(x); i++)
printf("%02X ", ptr[i] );

printf("\n");

int y = 0x1234;
ptr = (unsigned char*)&y;
for(i=0; i<sizeof(y); i++)
printf("%02X ", ptr[i] );

printf("\n");

return 0;
}

我的系统(X86CPU, RedHat FC,G++编译器)输出的结果是:
75 6B 7E 54 34 6F 9D 41
34 12 00 00

容易看得出来,整数0x1234使用4字节(0x34 0x12 0x00 0x00)内存表示,但是double的8字节就很难一眼看明白了。

为什么呢?因为浮点数在计算机中不像整数那样简单的使用数值表示,它使用的是科学计数法,通常由正负符号、数字、幂3部分组成,因此它可以表示很大数或者很小的数,但其精度是有限的,比如float只有6位数字的精度,而double一般也只有10位数字精度。

至于一个在内存中占8字节64位的浮点数,哪几位表示数字,哪几位表示幂,完全取决于编译器的实现,很可能MS VC的结果就和上面的不同。

指针和内存一直都是C或者C++较难的地方,因为这部分内容和计算机体系以及编译器的实现都有关系,就拿上面最简单的整数0x1234来说,在其他体