| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 798 人关注过本帖
标题:关于求Sizeof的问题
只看楼主 加入收藏
lele2010
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:84
专家分:121
注 册:2010-1-23
结帖率:100%
收藏
已结贴  问题点数:2 回复次数:9 
关于求Sizeof的问题
#include<stdio.h>
main()
{
    union dat
{
    int i;
    char ch;
    float f;
}x;
    printf("%d\n", sizeof(x));

}
结果是4;
怎么解释?
搜索更多相关主题的帖子: Sizeof 
2010-02-04 10:25
曼珠沙华
Rank: 2
来 自:广东
等 级:论坛游民
帖 子:121
专家分:98
注 册:2009-5-21
收藏
得分:0 
共用体的长度是共用体成员中长度最长的那个

走过了,却留下了痕迹。伤过了,却是一种无奈。人生只不过是一种擦肩而过的过程。
2010-02-04 11:34
hejirong
Rank: 2
等 级:论坛游民
帖 子:29
专家分:84
注 册:2010-1-31
收藏
得分:2 
程序代码:
#include<stdio.h>
main()
{                           //
    union dat 
{
    int i;
    char ch;
   float f;
}x;             //union dat x  //当一个共用体被说明时, 编译程序自动地产生一个变量,  其长度为联合中最大的变量长度。
    //以上例而言,最大长度是float数据类型,所以dat 的内存空间就是float型的长度。x为变量。

    printf("%d\n", sizeof(x));//  输出变量x的长度,十进制长度为4.

}
2010-02-04 11:38
lele2010
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:84
专家分:121
注 册:2010-1-23
收藏
得分:0 
回复 2楼 曼珠沙华
#include<stdio.h>
void main()
{
    struct test
    {
        char a;
        char b;
        double c;
    }s;
    printf("%d\n",sizeof(s));
}

那这个为什么是16?

喜欢结交更多C语言学习者,QQ:1093027367
2010-02-04 12:05
hejirong
Rank: 2
等 级:论坛游民
帖 子:29
专家分:84
注 册:2010-1-31
收藏
得分:0 
回复 4楼 lele2010
输出:8。
新建 Microsoft Office Word 文档.rar (200.53 KB)
2010-02-04 12:16
lele2010
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:84
专家分:121
注 册:2010-1-23
收藏
得分:0 
回复 5楼 hejirong
资料谢谢了!
但结果不是8!你不信的话,你可以调试一下,就可以知道答案了!

喜欢结交更多C语言学习者,QQ:1093027367
2010-02-04 12:34
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
double 是8个,前两个char占了2个字节,但后面的 double 对齐到8的长度上了。所以一共占了16个字节。
你可以分别打印一下成员的地址,看看是不是这样。
 
这不是必然的,是编译器实现的一种方式(不过一般应该这么实现,这样寻址的速度快,至少是在x86的架构上)。所以即使你试验的结果和我说的不一样也是有可能,不同的编译器可以有不同的结果。
2010-02-04 12:42
曼珠沙华
Rank: 2
来 自:广东
等 级:论坛游民
帖 子:121
专家分:98
注 册:2009-5-21
收藏
得分:0 
回复 4楼 lele2010
结构体,是里面所有成员的长度相加

走过了,却留下了痕迹。伤过了,却是一种无奈。人生只不过是一种擦肩而过的过程。
2010-02-04 13:03
许大牛
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2010-2-3
收藏
得分:0 
你把结构体里所有的字节数加起来就是了
2010-02-04 18:31
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:0 
回复 3楼 hejirong
让大家看个更有意思的:
struct Test1{
  int x;
  char y;
  int z;
};

struct Test2{
  int x;
  int y;
  char z;
}

sizeof(struct Test1)的值居然与sizeof(struct Test2)的值不一样。
这几天有幸买到了《C语言与程序设计大学教程》一书,我隆重向大家推荐!!这书里讲了是为什么,而且还讲了union的问题。很神,我以前许多不懂的知识在这本书里都找到答案了,所以再一次给大家共享!

刚才坛子里有人问自增自减的问题,我也在这本书里找到了答案,感觉自己一下子成了高手:)哈哈。我刚才去当当网上看,这本书居然卖断货了,晕。。。。
2010-02-04 21:27
快速回复:关于求Sizeof的问题
数据加载中...
 
   



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

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