c语言中sizeof的用法?

structA{intiXX;charcNN;}a;sizeof(a)=8;intx;sizeof(x)=4;charcx;sizeof(cx)=1;这上边的结果都是我电... struct A
{
int iXX;
char cNN;
}a; sizeof(a)=8;

int x;sizeof(x)=4;
char cx; sizeof(cx)=1; 这上边的结果都是我电脑的结果 那么这个结构体A的字节8是怎么得来的 怎么算的?
展开
 我来答
皮谨菅雨
2019-07-30 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:32%
帮助的人:736万
展开全部
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,不信自己试试
所谓的小号
2012-06-22
知道答主
回答量:10
采纳率:0%
帮助的人:9.9万
展开全部
应该是编译器的内存对齐问题……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为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。
追问
非常感谢你。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
东方辰汐
2012-06-22
知道答主
回答量:13
采纳率:0%
帮助的人:17.1万
展开全部
结构体的大小与内存对齐
  结构体的大小不是结构体元素单纯相加就行的,因为我们现在主流的计算机使用的都是32Bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素是就会相对更高效,这就是内存对齐的由来。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yikekuteng
2012-06-22 · 超过16用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:41.3万
展开全部
根据内存对齐原理,按照结构体中最大的类型算,也就是每个都是占用4字节,合起来就是8字节。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
philips1015
2012-06-22
知道答主
回答量:6
采纳率:0%
帮助的人:9509
展开全部
空间大小计算
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式