C 共用体
在接下来的时间里面,我们准备为大家介绍"共用体"。
(1)共用体:在同一段内存空间中存放多种不同类的变量,例如可把整型变量、字符型变量、浮点
型变量等放在同一个内存地址开始的内存空间中。
(2)共用体内存空间的大小,是根据所存放的变量中,长度最大的那个变量去分配内存空间,
而不是所有变量大小之和。
共用体定义的语法格式1:
union 共用体名字
{
成员1;
...
成员n;
}变量1,变量2,..变量n;
语法格式分析:
(1)以关键字union开始。
(2)共用体名字,按照变量名命名规则定义即可。
(3)一对大括号。
(4)大括号中可以定义共用体中要存放的成员,而成员的定义就是变量的定义,成员数量不限。
(5)大括号后所定义的就是共用体变量,多个变量之间以逗号分隔。
共用体定义的语法格式2:
union 共用体名字
{
成员1;
...
成员n;
};
union 共用体名字 变量1,变量2,..变量n;
语法格式分析:
(1)以关键字union开始。
(2)共用体名字,按照变量名命名规则定义即可。
(3)一对大括号。
(4)分号,说明共用体定义结束。
(5)以union开始,后面接着写上已经定义的共用体名字,然后,再写上要定义的共用体变量,
每个变量之间以逗号分隔。
例子:
union UN //定义了共用体UN
{
int x;
char y;
float z;
};
union UN a,b,c;
接下来,我们看看共用体变量的引用语法格式:
共用体变量名.共用体中的成员名
语法格式分析:
(1)已经定义的共用体变量名。
(2)一个点号运算符,格式要求不能省略。
(3)共用体中的成员名字。
例子:
//使用上面例子中定义的UN共用体所定义的变量
a.x;//通过共用体变量a调用了成员x。
接下来,我们看看共用体的特性:
(1)共用体虽然可以存放多个成员,但是,每一次只可以有一个成员起作用。
(2)共用体变量调用成员时,只有最后调用的成员起作用。
例子:
//使用上面例子中定义的UN共用体所定义的变量
a.x = 1;//通过共用体变量a调用了成员x,并赋值为1。
a.y = 'u';//通过共用体变量a调用了成员y,并赋值为字符'u'。
a.z = 1.5;//通过共用体变量a调用了成员z,并赋值为1.5。
例子分析:
在上同的3行代码中,最后是通过共用体变量a调用了成员z,并赋值了1.5,因为,它是最后
调用的,所以,只有a.z起作用,其它两行代码已经没有意义,因为,第一个特性说明了,每一次
只可以有一个成员起作用。
(3)共用体变量的内存地址与共用体中的所有成员的内存地址是一样的。
例如:使用上面例子中定义的UN共用体与它所定义的变量a为例,&a 与 &a.x、&a.y、
&a.z 的内存地址是一样的。因为,它们都是在同一个内存地址开始的内存空间中。
(4)不能对共用体变量名赋值或引用。
例如:使用上面例子中定义的UN共用体与它所定义的变量a为例,
a = 1; //错误,不能对共用体a赋值。
int n = a;//错误,不能引用共体体a。
(5)不能在共用体定义时进行初始化。
例子:
union UN //定义了共用体UN
{
int x;
char y;
float z;
} a = { 1,'d',1.5 }; //错误,不能在定义时初始化。
(6)不能把共用体作为函数参数,也不能返回共用体变量,但可以使用共用体变量指针。
(7)共用体可以定义在结构体中,而结构体也可以定义在共用体中。
例子:
struct
{
int x;
union
{
char y;
float z;
}test; //结构体中定义了共用体变量test
};
(8)可以定义共用体数组,而数组也可以作为共用体的成员。
例子:
union UN //定义了共用体UN
{
int x;
char y;
float z[3]; //定义数组成员z
};
union UN a[2]; //定义了共用体数组a
非常好,现在,我们已经掌握了C中的“共用体”这个知识点,但是,如何去运行用它呢?所以,我们就要通过下方的按钮进入到游戏中,然后,运用该知识点去完成任务,这样,才可以加深大家对每个知识点的理解和运用,以及“尽快进入到编程的状态”。
不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)