C零基础视频-42-共用体
Posted shellmad
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C零基础视频-42-共用体相关的知识,希望对你有一定的参考价值。
共用体的定义与使用
共用体的关键字是union,共用体是非基本数据类型,同结构体类似,我们需要先声明共用体类型,再利用自定义的类型去定义变量。
#include <stdio.h>
#include <string.h>
union MyUnion
{
double dbWeight;
int nID;
char szName[8];
};
int main(int argc, char* argv[])
{
MyUnion unionValue;
unionValue.dbWeight = 3.14;
unionValue.nID = 5;
strcpy(unionValue.szName, "Jack");
return 0;
}
共用体与结构体的比较
从以上的代码看,结构体与共用体的使用似乎非常相似:都是非基本数据类型,都需要先定义类型,再定义变量,都通过"."运算符取成员。
实则不然,它们最大的区别是:
- 结构体最终占用的内存大小,是所有成员的相加的结果,各成员在内存中不重叠
- 共用体最终占用的大小,按成员最大者计算,各成员共用内存
我们可以举生活中例子,比如我们有块公告板,公告板上每次会记录一条信息,但是信息的类型不同,有可能是:
- 体重信息,double类型
- 学号信息,int类型
- 姓名信息,char数组类型
也就是说,三种情况都可能出现,但是不会同时出现。这就适合用共用体存放。
#include <string.h>
union MyUnion
{
double dbWeight;
int nID;
char szName[8];
};
int main(int argc, char* argv[])
{
MyUnion unionValue;
unionValue.dbWeight = 3.14;
printf("公告,体重:%f
", unionValue.dbWeight);
unionValue.nID = 5;
printf("公告,学号:%d
", unionValue.nID);
strcpy(unionValue.szName, "Jack");
printf("公告,姓名:%s
", unionValue.szName);
return 0;
}
我们也可以通过sizeof,来验证struct和union的不同。
#include <string.h>
union MyUnion
{
double dbWeight;
int nID;
char szName[8];
};
struct MyStruct
{
double dbWeight;
int nID;
char szName[8];
};
int main(int argc, char* argv[])
{
printf("sizeof union:%d
", sizeof(MyUnion));
printf("sizeof struct:%d
", sizeof(MyStruct));
return 0;
}
以上是关于C零基础视频-42-共用体的主要内容,如果未能解决你的问题,请参考以下文章