结构体
#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呢。 联合体,又叫共用体,共用的是同一块地址,地址长度是变量中最长的那个。
这个联合体最长的是int型,所以整体长度为4;
联合体地址内存储的内容是最后一次赋值的内容,最后一次是s.age=28;会输出28,同样s.income也会输出28;当最后一次赋值是1000时,s.age,s.income都会是1000. 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]