联合的特点:
像结构一样,联合也有多个成员,而且这些成员具有不同的数据类型
编译器职位联合中字大的成员非配足够的内存空间。
联合中的成员,同一时间只能有一个,彼此覆盖。
联合有点像电话亭,有一个人进去了,其他人只能等着,好像联合用刀的不会很多吧。
//
// main.c
// UnionTest
//
// Created by 千 on 16/7/22.
// Copyright © 2016年 kodulf. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
/*
和结构一样:
联合变量,联合标记,联合类型定义;
联合变量,使用到就要申明很麻烦。
联合标记,可以直接声明,但是前面要有union来修改
联合类型定义,可以像java 一样定义
*/
//联合的变量
int i;
union{
int i;
float f;
char c;
}u;
//访问成员变量名臣,成员名称
u.i=10;
printf("u.i=%d\n",u.i);
printf("--------\n");
u.f=12.0f;
printf("u.i=%d",u.i);//i已经被f覆盖了
printf("u.f=%f\n",u.f);
printf("--------\n");
u.c='c';
printf("u.i=%d",u.i);
printf("u.f=%f",u.f);
printf("u.c=%c\n",u.c);//c覆盖了上面的f
printf("--------\n");
/*
输出结果:
u.i=10
--------
u.i=1094713344u.f=12.000000
--------
u.i=1094713443u.f=12.000094u.c=c
*/
//和之前的结构变量和结构类型标记的一样,如果不使用结构类型标记,那么每一次使用到新的结构变量的时候都要重新的创建。
//联合的标示
union MyUnion{
int i;
float f;
char c;
};
union MyUnion mu,mu2;
mu.i=10;
printf("mu.i=%d\n",mu.i);
printf("--------\n");
mu.f=12.0f;
printf("mu.i=%d",mu.i);//i已经被f覆盖了
printf("mu.f=%f\n",mu.f);
printf("--------\n");
mu2.c='c';
printf("mu2.c=%c\n",mu2.c);//
//和结构类型定义一样,这里也有 联合的类型定义
typedef union{
int i;
float f;
char c;
}MyUnionType;
MyUnionType myU,myu2;
myu.i=10;
printf("myu.i=%d\n",myu.i);
printf("--------\n");
mu.f=12.0f;
printf("myu.i=%d",myu.i);//i已经被f覆盖了
printf("myu.f=%f\n",myu.f);
printf("--------\n");
mu2.c='c';
printf("myu2.c=%c\n",myu2.c);//
return 0;
}