请大虾指点一下有关结构sizeof的问题!

hellowin 2005-08-05 07:24:12
typedef struct gifscrdesc
{
WORD wWidth;
WORD wDepth;
struct globalflag
{
BYTE Palbits: 3;
BYTE SortFlag: 1;
BYTE ColorRes: 3;
BYTE GlobalPal: 1;
}GlobalFlag;
BYTE byBackground;
BYTE byAspect;
}GIFSCRDESC;

这个结构在photoshop生产的gif文件中为7,而sizeof返回为8,为什么呢?
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcmute 2005-08-05
  • 打赏
  • 举报
回复
#pragma pack(push, 1)
typedef struct gifscrdesc
{
WORD wWidth;
WORD wDepth;
struct globalflag
{
BYTE Palbits: 3;
BYTE SortFlag: 1;
BYTE ColorRes: 3;
BYTE GlobalPal: 1;
}GlobalFlag;
BYTE byBackground;
BYTE byAspect;
}GIFSCRDESC;
#pragma pack(pop)
younggle 2005-08-05
  • 打赏
  • 举报
回复
struct globalflag
{
BYTE Palbits: 3;
BYTE SortFlag: 1;
BYTE ColorRes: 3;
BYTE GlobalPal: 1;
}GlobalFlag;
这个结构你已经赋了初值,sizeof(globalflag) = 1,
故 sizeof(GIFSCRDESC) = 2+2+1+1+1 = 7,
但是由于你的编译选项里面是8个字节对齐的,而7个字节明显不对齐了,所以是8。
younggle 2005-08-05
  • 打赏
  • 举报
回复
struct globalflag
{
BYTE Palbits: 3;
BYTE SortFlag: 1;
BYTE ColorRes: 3;
BYTE GlobalPal: 1;
}GlobalFlag;
这个结构你已经赋了初值,sizeof(globalflag),
故 sizeof(GIFSCRDESC) = 2+2+1+1+1 = 7,
但是由于你的编译选项里面是8个字节对齐的,而7个字节明显不对齐了,所以是8。
hellowin 2005-08-05
  • 打赏
  • 举报
回复
是不是可以这样计算呢?

GIFSCRDESC gs;

(int)&gs.byAspect - (int)&gs + (int)sizeof(unsigned char)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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