鱼C论坛

 找回密码
 立即注册
查看: 784|回复: 2

[已解决]结构体

[复制链接]
发表于 2020-12-5 14:12:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
union u
{char *name;
int age;
int income;
} s;
s.name="WANGLING";
s.age=28;
s.income=1000;
printf("%d\n", s.age);        请问这里是输出的是age,为什么输出是1000呢,不是28呢。
最佳答案
2020-12-5 14:22:17
联合体,又叫共用体,共用的是同一块地址,地址长度是变量中最长的那个。
这个联合体最长的是int型,所以整体长度为4;
联合体地址内存储的内容是最后一次赋值的内容,最后一次是s.age=28;  会输出28,同样s.income也会输出28;当最后一次赋值是1000时,s.age,s.income都会是1000.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-5 14:22:17 | 显示全部楼层    本楼为最佳答案   
联合体,又叫共用体,共用的是同一块地址,地址长度是变量中最长的那个。
这个联合体最长的是int型,所以整体长度为4;
联合体地址内存储的内容是最后一次赋值的内容,最后一次是s.age=28;  会输出28,同样s.income也会输出28;当最后一次赋值是1000时,s.age,s.income都会是1000.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 14:42:22 | 显示全部楼层
       union 不是结构,而是共用体,意思是共用体中的各个成员共同使用同一块内存。在本例中,字符指针成员name、整型变量成员 age 以及整型变量成员 income 三个成员共同使用共用体内存空间 s。如果为 s . age 赋值 28,那么,通过 s . income 访问到的值也是 28,因为 s . age 和 s . income 本来就占用同一个内存空间,实际上就是同一个变量。
       在这个共用体中,name 的用法是完全错误的,name 如果需要存储字符串,就必须定义为字符数组,而不是字符指针!
       此外,为 s . name 赋值必须通过函数,而不可以使用等号。
#include<stdio.h>
int main()
{
        union u {
                char name[80]         ;
                int age               ;
                int income            ;
        } s                           ;
        strcpy(s . name , "WANGLING") ;
        s . age = 28                  ; // s . age 与 s . income 是同一个变量
        s . income = 1000             ; // s . age 与 s . income 是同一个变量
        printf("%d\n", s . age)       ; // s . age 与 s . income 是同一个变量,所以,输出是 1000 而不是 28
} 

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 12:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表