通过上述例题,可以看出:
(1)共用体通过内存覆盖技术,实现共用体变量各成员的内存共享,所以在某一时刻,共用体变量的内存地址中存放的、起作用的是最后一次存入的成员值。
(2)由于所有成员共享同一内存空间,故共用体变量与其各成员的地址相同。例如,&u1=&n1.a=&u1.b=&u1.c。
(3)不能对共用体变量进行初始化,也不能将共用体变量作为函数参数,以及不能使函数返回一个共用数据,但可以使用指向共用体变量的指针。
(4)对于共用体中定义的不同类型的成员,在引用时需要注意不同类型的差异,如:
union un
{
int a;
float b;
};
main()
{
union un ul;
ul.a=20;
ul.b=10;
printf("%f",ul.a);
}
程序执行结果,有的读者可能认为是10,但实际输出是“0”。为什么会这样呢?
因为共用体变量中起作用的是最后一次存入的成员值,也就是u1.b的值10,而u1.b类型为浮点型,在内存中的存储方式与整型是不同的,所以当u1.b的值覆盖了成员a时,并不能将10也赋值给成员a。
(5)共用类型可以出现在结构类型定义中,同样,结构体类型定义中也可以出现共用体类型。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>