| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2860 人关注过本帖
标题:求c语言结构体大小,编程输出的和计算不一样...求大神帮忙讲解一下啊?谢谢 ...
只看楼主 加入收藏
境善
Rank: 2
等 级:论坛游民
帖 子:76
专家分:16
注 册:2012-10-29
结帖率:86.21%
收藏
已结贴  问题点数:2 回复次数:7 
求c语言结构体大小,编程输出的和计算不一样...求大神帮忙讲解一下啊?谢谢~~
以下结构体stu5,我计算的是16,但是代码输出的是20。。。为什么啊?

 struct stu5
{
      char i;
      struct
      {
           char c;
           int j;
      } ss;
      char a;
      char b;
      char d;
      char e;
      char f;
} stu5;
搜索更多相关主题的帖子: 结构体 c语言 
2016-01-29 21:42
luoye1994
Rank: 2
等 级:论坛游民
帖 子:57
专家分:58
注 册:2015-6-29
收藏
得分:1 
你只有结构体,跟你的计算过程没有关系!具体点可以互助
2016-01-29 23:24
境善
Rank: 2
等 级:论坛游民
帖 子:76
专家分:16
注 册:2012-10-29
收藏
得分:0 
回复 2楼 luoye1994
就是printf("%d",sizeof(stu5));啊。。
2016-01-30 22:52
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
不知道你怎么算出的16个字节。
按char占1个、int占4个计算,应该是11个字节,之所以实际占20个字节,我觉得是内存对齐的需要。由于使用了结构体嵌套,将结构体内的变量分成3段,每段都需要内存对齐,即每段内存必须是4的倍数,第一段是char i,虽然只需要1个字节,但实际占4字节;第二段是char 出,int j,虽只需要5字节,但占8字节,具体应该是char c占4个,可以用&stu5.ss.j-&stu5.ss.c=4验证;第三段是char a至char f,虽只需要5个,但必须占8个才能保证对齐,具体应该是f占4个,这样这个结构体实际占用空间为4+8+8=20。
2016-01-31 01:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
任何時候都不要自己去算結構的尺寸,在代碼中也不要假定你知道那些細節,這跟未定義行爲是一樣的性質。

授人以渔,不授人以鱼。
2016-01-31 20:20
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:1 
回复 5楼 TonyDeng
版主说的是!
自己写肯定不需要关心这些,不过结构体可以当一条记录直接存到文件,当存在兼容问题时,还是要关心结构体元素具体位置的,比如bmp文件头,就是一个结构体,许多人解析时不会再使用原定义的结构体了,都是缓存到内存,用指针来访问,好在bmp文件头都指明了各元素相对位置,如未指明,你就必须分析结构体各元素位置了,还只能按16位编译器的规则分析。
2016-02-01 08:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:1 
回复 6楼 拉链
自己指定对齐方式
2016-02-01 09:51
境善
Rank: 2
等 级:论坛游民
帖 子:76
专家分:16
注 册:2012-10-29
收藏
得分:0 
回复 4楼 拉链
第一个char为什么是4个字节呢,应该是偏移量0+自身字节1,应该是1啊。。
2016-02-26 15:03
快速回复:求c语言结构体大小,编程输出的和计算不一样...求大神帮忙讲解一下啊? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045823 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved