请教 sizeof(struct a)?

yujibo 2000-03-14 09:43:00
有程序如下:
struct a{
unsigned char a;
int b;
}
main(){
printf("size is %d",sizeod(struct a);
retrun 0;
}
运行结果:size is 8;
我不明白为什么不是5;
怎样才能得到5;
敬请各位赐教!thanks a lot!
...全文
187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sayi 2000-03-14
  • 打赏
  • 举报
回复
use the following program

#include "stdio.h"
struct a
{
unsigned char a;
unsigned char b;
int c;
};
int main()
{
printf("size is %d", sizeof(a));
return 0;
}

The result is :size is 8
This program is tested in SunSolaras and VC6++.
NoBug 2000-03-14
  • 打赏
  • 举报
回复
sizeof计算的是改变量所占用的物理字节的尺寸。对于一个变量,它所占的物理字节尺寸和编译器的字节对齐方式有关。具体见编译器设置。
Sniper 2000-03-14
  • 打赏
  • 举报
回复
这是由于编译器缺省情况下为结构分配空间以8字节为单位进行,于是你的5字节结构被分配了8字节,这样可以加快操作速度。但在有些情况下,比如报文交互时就会导致错误。
以VC为例,解决方法如下:
可以在Project->Settings->C/C++->Code Generation->Struct mermber alignment中修改设定。
如需要对特定结构进行特别设定,可处理如下:
在结构定义开始处加入:#pragma pack(n) 进行设定
在结构定义结束处加入:#pragma pack() 返回缺省设定

详细情况可参阅MSDN中#pragma pack()部分。
祝顺利。
zdg 2000-03-14
  • 打赏
  • 举报
回复
VC中字节对齐造成的...

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧