| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:共用体的运用
只看楼主 加入收藏
笨女孩
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2011-7-13
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:9 
共用体的运用
程序代码:
#include<stdio.h>
union ks
{
    int a;
    int b;
};
union ks s[4];
union ks *p;
main()
{
    int n=1,i;
    printf("\n");
    for(i=0;i<4;i++)
    {
        s[i].a=n;
        s[i].b=s[i].a+1;
        n=n+2;
    }
    p=&s[0];
    printf("%d,",p->a);
    printf("%d\n",++p->a);
}
有哪位大侠能告诉我为什么结果是 2,3
我解不出来
2012-02-19 22:33
心淡如水
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2012-2-20
收藏
得分:11 
因为是共用体结构,a和b是共用一个储存空间,也就是说s[0].a与s[0].b的值是一样的。
s[i].a=n;
s[i].b=s[i].a+1;
这两句执行后,s[]0.a与s[0].b是等于s[i].a+1。
而++p->a等于a的值+1。
所以
 for(i=0;i<4;i++)
    {
        s[i].a=n;
        s[i].b=s[i].a+1;   //此时s[i].a的值是2
        n=n+2;
    }
    p=&s[0];
    printf("%d,",p->a);
    printf("%d\n",++p->a);此时输出的值是s[o].a + 1。
2012-02-20 16:07
心淡如水
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2012-2-20
收藏
得分:0 
所以最后结果是2,3
2012-02-20 16:08
笨女孩
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2011-7-13
收藏
得分:0 
回复 2楼 心淡如水
那按你的说法,s[1].a不也是等于是s[1].b==4吗?
2012-02-20 16:53
心淡如水
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2012-2-20
收藏
得分:0 
不错
2012-02-20 17:03
心淡如水
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2012-2-20
收藏
得分:0 
共用体结构的特点就是里面的变量共用一个储存空间,改变一个变量的值就等于改变了所有变量的值
2012-02-20 17:10
笨女孩
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2011-7-13
收藏
得分:0 
回复 6楼 心淡如水
那结构不就2、4了吗?
2012-02-20 17:43
心淡如水
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2012-2-20
收藏
得分:0 
结果?是4,5。你修改下运行就知道了
2012-02-20 17:48
心淡如水
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2012-2-20
收藏
得分:0 
s[1].a是4,s[0].a是2,而++p->a等于s[0].a的值+1,也就是3。

2012-02-20 18:06
心淡如水
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2012-2-20
收藏
得分:0 
我估计你是++p->a这句理解错了,这句其实等于++(p->a),而要指向s[1].a,则是(++p)->a。
2012-02-20 18:10
快速回复:共用体的运用
数据加载中...
 
   



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

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