c语言中sizeof的用法?

struct A
{
int iXX;
char cNN;
}a; sizeof(a)=8;

int x;sizeof(x)=4;
char cx; sizeof(cx)=1; 这上边的结果都是我电脑的结果 那么这个结构体A的字节8是怎么得来的 怎么算的?

sizeof(a)
说的是结构体的大小2+1+2=5
sizeof(b)是指针b的大小,它在不同位的机器上占的字节数不同,在你的机器上可能是2了
指针不因为类型的不同而使占的自己数变化
它就是一个整型占的字节数
char
*p;
int
*q;
printf("%d\n",sizeof(p));
printf("%d\n",sizeof(q));
结果都是2,不信自己试试
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-22
应该是编译器的内存对齐问题……cNN偏移了吧……
下面列出常用类型的对齐方式(vc6.0,32位系统)。

类型
对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)

Char
偏移量必须为sizeof(char)即1的倍数

int
偏移量必须为sizeof(int)即4的倍数

float
偏移量必须为sizeof(float)即4的倍数

double
偏移量必须为sizeof(double)即8的倍数

Short
偏移量必须为sizeof(short)即2的倍数
各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。追问

非常感谢你。。

第2个回答  2012-06-22
结构体的大小与内存对齐
  结构体的大小不是结构体元素单纯相加就行的,因为我们现在主流的计算机使用的都是32Bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素是就会相对更高效,这就是内存对齐的由来。本回答被提问者采纳
第3个回答  2012-06-22
根据内存对齐原理,按照结构体中最大的类型算,也就是每个都是占用4字节,合起来就是8字节。
第4个回答  2012-06-22
空间大小计算

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网