1447391641 发表于 2020-12-5 14:12:44

结构体

#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.

jackz007 发表于 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         ;
                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
}

页: [1]
查看完整版本: 结构体