这个结构体大小是多少,为什么?讲明白有赏

DontKissBossAss 2010-08-24 12:33:14
struct test
{
int a;
int b;
short c;
char d[101];
short e;
};


sizeof(test) = ?
...全文
264 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2010-08-24
  • 打赏
  • 举报
回复
int a;
int b;
short c;
char d[101];
short e;

a的偏移地址为0,本身大小为4
b的偏移地址为4,本身大小为8
c的偏移地址为8,占用大小为2
d的偏移地址为10,占用大小为101
(以上都没有出现偏移地址的改变:偏移地址要能被本身大小整除(数组是按其中元素来的))
e的偏移地址为112,占用大小为2
(这里偏移地址加了一个1,被2)
到现在为止有114字节。

其中最大元素大小为4,要求整个大小被4整除,于是再加一个2。
DontKissBossAss 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 pengzhixi 的回复:]

假设int 大小为4,short为2,起始地址为0;
struct test
{
int a;//起始地址为0,占4字节
int b;//起始地址为4,符合sieof(int)的大小对齐,占4
short c;//起始地址为8,能被sizeof(short)整除,占2字节
char d[101];//起始地址为10,占101字节,
short e;//如果起始地址为111那么不能被……
[/Quote]

谢谢/
sunhuanshan 2010-08-24
  • 打赏
  • 举报
回复
拿分滚蛋....
DontKissBossAss 2010-08-24
  • 打赏
  • 举报
回复
这个问题,我承认是我看错了,%d写成了 %x, 但是请问loaden,我哪里居高临下了。相反倒是你
幼稚的问题,看你标题就不爽!

我标题怎么啦,我对我认为有价格的问题都是这么高,这个可以看看我的记录。
今天临时写一下这个就是居高临下了么
pengzhixi 2010-08-24
  • 打赏
  • 举报
回复
假设int 大小为4,short为2,起始地址为0;
struct test
{
int a;//起始地址为0,占4字节
int b;//起始地址为4,符合sieof(int)的大小对齐,占4
short c;//起始地址为8,能被sizeof(short)整除,占2字节
char d[101];//起始地址为10,占101字节,
short e;//如果起始地址为111那么不能被sizeof(short)整除,那么起始地址为112,占2个字节,另外补齐2个字节。因为整体是按照int成员对齐,所以大小应该是116
};
dickbarry 2010-08-24
  • 打赏
  • 举报
回复
你俩别吵

我是来接分的...
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
有问题就交流问题,但请别居高临下,谢谢!
dickbarry 2010-08-24
  • 打赏
  • 举报
回复
vs2005 + 32位win7

测试sizeof(test)=116
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dontkissbossass 的回复:]

引用 9 楼 loaden 的回复:

printf("sizeof(test) = %d, sizeof(a) = %d",sizeof(test), sizeof(a));


我知道你我那个写错了,但是请试试,sizeof(test),在评价我这个问题是不是幼稚,真的loaden,第一次有点失望,
[/Quote]
我是对你标题中的“讲明白有赏”反感而已!
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
sizeof(test) = 116, sizeof(a) = 116
Process returned 0 (0x0) execution time : 0.016 s
Press any key to continue.
DontKissBossAss 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 loaden 的回复:]

printf("sizeof(test) = %d, sizeof(a) = %d",sizeof(test), sizeof(a));
[/Quote]

我知道你我那个写错了,但是请试试,sizeof(test),在评价我这个问题是不是幼稚,真的loaden,第一次有点失望,
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dontkissbossass 的回复:]

有一个,你试验了么,一看就知道116,你试试在说,
[/Quote]
呵呵,昨晚没睡好觉吧??
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
printf("sizeof(test) = %d, sizeof(a) = %d",sizeof(test), sizeof(a));
DontKissBossAss 2010-08-24
  • 打赏
  • 举报
回复
有一个,你试验了么,一看就知道116,你试试在说,
DontKissBossAss 2010-08-24
  • 打赏
  • 举报
回复
老邓,经验不一定正确,尽管,曾经一定正确。
dickbarry 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 loaden 的回复:]
32位平台下:
struct test
{
int a; // 4 byte
int b; // 4 byte
short c; // 2 byte
char d[101]; // 101 byte
short e; // 2 byte
};

相加为113byte,4byte对齐,最终116byte。
楼主是想散分么?
[/Quote]
是想散分么?
DontKissBossAss 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]

幼稚的问题,看你标题就不爽!
[/Quote]

你sizeof(test) 一下试试,结果不正确 116 不正确,但是当执行我上边代码时候,才是116
DontKissBossAss 2010-08-24
  • 打赏
  • 举报
回复
奇怪,当我执行如下时候,结果跟我猜的一样了

	test a;
a.a = 0x11111111;
a.b = 0x22222222;
a.c = 0x3333;
for (int i = 0; i < 103; i++)
{
a.d[i] = 0xFF;
}
printf("sizeof(test) = %d, sizeof(a) = %d", sizeof(a));
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
32位平台下:
struct test
{
int a; // 4 byte
int b; // 4 byte
short c; // 2 byte
char d[101]; // 101 byte
short e; // 2 byte
};

相加为113byte,4byte对齐,最终116byte。
楼主是想散分么?
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
幼稚的问题,看你标题就不爽!
加载更多回复(15)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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