C语言之共用体

举报
yd_221104950 发表于 2020/12/02 23:40:33 2020/12/02
【摘要】 C语言共用体,又叫联合体,使用关键字union定义。共用体使用同一存储单元存放不同类型的变量。 定义共用体类型变量 基本形式格式: union 共用体名{ 成员表列; } 变量表列; 123 具体有四种方式 : 1、定义共用体的同时定义变量: union MyData{ int type; char str; }data; 1234 2、先定义共用体...

C语言共用体,又叫联合体,使用关键字union定义。共用体使用同一存储单元存放不同类型的变量。

定义共用体类型变量

基本形式格式:

union 共用体名{
		成员表列;
}  变量表列;

  
 
  • 1
  • 2
  • 3

具体有四种方式 :

  • 1、定义共用体的同时定义变量:
union MyData{ int type; char str;
}data;

  
 
  • 1
  • 2
  • 3
  • 4
  • 2、先定义共用体,后再定义变量:
union MyData{ int type; char str;
};
union MyData data;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 3、先定义共用体,再定义共用体别名,再用别名定义变量:
typedef union MyData{ int type; char str;
} Data;
Data data;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 4、匿名共用体,只使用一次
union { int type; char str;
} data;


  
 
  • 1
  • 2
  • 3
  • 4
  • 5

初始化成员列表,只能初始化一个

  • 1、定义共用体的同时定义变量,并进行初始化变量:
union MyData{ int type; char str;
}data = {55};

  
 
  • 1
  • 2
  • 3
  • 4
  • 2、先定义共用体,再定义变量,并初始化变量:
union MyData{ int type; char str;
};
union MyData data = {13};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 3、先定义共用体,再定义共用体别名,再用别名定义变量,并初始化变量:
typedef union{ int type; char str;
}Data;
Data data = {88};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 4、匿名共用体,只使用一次,初始化变量:
union{ int type; char str;
}data = {9};

  
 
  • 1
  • 2
  • 3
  • 4

访问共用体变量

data.type = 22;
或
data.str = 'C';

  
 
  • 1
  • 2
  • 3

完整例子

#include <stdio.h>
union { int type; char str;
} data;
int main(int argc,char* argv){ data.type = 22; printf("type:%d\n",data.type); printf("type 大小(单位:byte):%ld\n",sizeof(data.type)); data.str = 'B'; printf("str:%c\n",data.str); printf("str大小(单位:byte):%ld\n",sizeof(data.str)); return 0;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行结果:

~/Desktop/c$ gcc main.c -o main
~/Desktop/c$ ./main
type:22
type 大小(单位:byte):4
str:B
str大小(单位:byte):1

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

共用体总结

  • 共用体起作用的成员是最后一次赋值的成员,之前的会被取代;
  • 共用体变量的地址和它各成员的地址都是同一个地址,同用一个存储单元
  • 不能对共用体整体赋值
  • 初始化成员列表,只能初始化一个
  • 同种类型的共用体变量可以互相赋值
  • 共用体也可以和指针,数组之类的搭配

谢谢阅读。

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/103632095

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。