欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 76.共用体

76.共用体

2024/10/25 0:33:00 来源:https://blog.csdn.net/2301_78343139/article/details/141141937  浏览:    关键词:76.共用体

目录

一.什么是共用体

二.语法格式

三.区别

四.视频教程


一.什么是共用体

共用体(有的资料也叫联合体,)和结构体很像,也可以包含多个不同类型的成员。但是行为方式和结构体完全不同。

我们先看共用体的语法格式。

二.语法格式

共用体的定义与结构体非常相似。只要把struct变成union就是共用体。

声明:
union 共用体名称
{共用体成员1;共用体成员2;共用体成员3;...
};
如:
union data
{int a;char b
};也可以在声明的同时定义共用体变量
union 共用体名称
{共用体成员1;共用体成员2;共用体成员3;...
}a,b,c;也可以分开定义:
共用体名称 变量名字
如
union  data a = {1}; //一次只初始化一个成员
union  data b = a;  //用一个共用体初始化另一个共用体
union  data c = {.b = 'A',  //指定初始化成员b
}//使用点运算符(.)为共用体成员赋值或访问

三.区别

我们都知道,在定义变量的时候会在内存中申请空间。结构体变量也不例外。在定义结构体变量的时候会给每个成员申请空间。

但是共用体的所有成员是共享一个内存地址。(相当于多个人共用一个身体,但是多个人不会同时出现,只能不断切换。人格分裂?)

例1:

#include <stdio.h>
#include <string.h>union student
{int year;char name[20];
};int main(void)
{union student stu;stu.year = 18;strcpy(stu.name,"xiaoming");printf("stu.year addr is %p\n",&stu.year);printf("stu.name addr is %p\n",&stu.name);return 0;}

运行结果:

例2:

#include <stdio.h>
#include <string.h>union student
{int year;char name[20];
};int main(void)
{union student stu;stu.year = 18;strcpy(stu.name,"xiaoming");printf("stu.year addr is %p\n",&stu.year);printf("stu.name addr is %p\n",&stu.name);printf("stu.name year is %d\n",stu.year);printf("stu.name value is %s\n",stu.name);return 0;}

运行结果:

因为共用一个地址,所以在赋值的时候会互相覆盖,所以只有最后一个值可以打印成功。

注意:共用体类型的变量占用内存空间的大小等于成员分量中最长的分量所占用内存的长度

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

四.视频教程

76.共用体_哔哩哔哩_bilibili

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com