首页 > 编程语言 > 详细

C语言入门学习第三十六天——共用体

时间:2021-04-06 20:08:40      阅读:15      评论:0      收藏:0      [点我收藏+]

镇楼图

技术分享图片

Pixiv:疯猫MC

==================

共用体

结构体如同一个团体,团体内有很多成员。而共用体如同人格分裂,本身就是一个而存在多个不同的人格。

虽然在对成员处理上不太一样,但用法基本和结构体一致,共用体指针也是使用->来获取成员变量。

结构体内的成员的内存地址不一致,而共用体内的成员的内存地址是共用一个内存地址的。

定义格式如下

union 共用体名称{
    成员1;
    成员2;
    成员3;
    //...
};
#include<stdio.h>

union _test{
    int a;
    double b;
    char *str;
};

int main(void){
	union _test test;
    test.a = 200;
    printf("%d\n",test.a);
    test.b = 1.2345;
    test.str = "13245";
    printf("a的地址%p\n",&test.a);
    printf("b的地址%p\n",&test.b);
    printf("str的地址%p\n",&test.str);
}
//从结果来看,共用体内的成员变量确实是使用同一地址

共用体的成员无法一起打印出,因为都共用同一内存会相互覆盖

#include<stdio.h>

union _test{
    int a;
    double b;
    char *str;
};

int main(void){
	union _test test;
    test.a = 200;
    printf("%d\n",test.a);
    test.b = 1.2345;
    //此时覆盖a,a无法正常输出
    test.str = "13245";
    //此时覆盖b,b无法正常输出
    printf("a为%d\n",test.a);
    printf("b为%lf\n",test.b);
    printf("str为%s\n",test.str);
}

共用体占用的内存会大于等于所有成员中占用最多内存空间的成员。

由于【内存对齐】的关系可能会有一部分多余的内存。

共用体也可以嵌套结构体,当然共用体目前来说用到的场景比较少,可以先不考虑。

初始化共用体

union _data{
	int a;
    char b;
    float c;
};

union _data t1 = {
    520,
    ‘c‘,
};
//按顺序来初始化共用体



//在C99下有这种初始化方法
union _data t2 = {
    .b = ‘b‘,
    .c = 1.2
};
//指定成员去初始化

参考资料

https://fishc.com.cn

http://www.cplusplus.com/reference

https://www.icourse163.org/course/ZJU-200001

C语言入门学习第三十六天——共用体

原文:https://www.cnblogs.com/AlienfronNova/p/14623055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!