零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数
一.共用体union简介
在 C 语言编程中,变量的定义是分配存储空间的过程,一般情况下,每个变量都具有自己的存储空间,使用联合体可以实现在同一个内存空间中存储不同的数据类型,所有数据共用一块内存。
在 C 语言中,定义联合体的关键字为 union ,定义一个联合体类型的一般形式如下:
union 联合名
{
成员表
};
成员表中可以包含若干成员,成员的一般形式为:类型说明符 成员名,联合体类型占用的字节数与成员中最大数据类型占用的字节数一致。
结构体和联合体的区别在于,结构体的各个成员会占用不同的内存,互相之间没有影响,而联合体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
二.共用体union定义变量
1.先创建共用体 union ,再定义变量
//创建联合体模板union data
union data {
int a;
char b;
double c;
};
//使用联合体模板定义变量a,b,c
union data a, b, c;
2.同时创建共用体 union 和变量
//创建联合体模板的同时定义变量
union data {
int a;
char b;
double c;
} a, b;
3.使用 typedef 定义
//联合体模板union data重命名为data_u类型
typedef union data {
int a;
char b;
double c;
} data_u;
//使用data_u类型去创建变量
data_u a, b;
注意与方案一的区别,使用 typedef 可以再定义变量前忽略 union;
三.共用体union变量初始化
data_u a;
a.a = 10;
//将一个联合体初始化为同类型的联合体
data_u b = a;
//初始化联合体的第一个成员
data_u c = {20};
//指定初始化某个成员
data_u d = {.a = 30};
四.共用体union实战
#include <stdio.h>
typedef union data {
int a;
char b;
double c;
} data_u;
int main(int argc, char *argv[])
{
data_u a = {.a = 100};//指定初始化某个成员
printf("a.a = %d\n", a.a);
return 0;
}
五.共用体union和结构体struct区别
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
六.猜你喜欢
- C语言 数组下标越界和内存溢出区别
- C语言 使用指针遍历数组
- C语言 指针和数组区别
- C语言 指针数组和数组指针区别
- C语言 野指针
- C语言 函数值传递和址传递
- C语言 函数不定长参数
- C语言 函数指针
- C语言 指针函数
- C语言 回调函数 callback
- C语言 #pragma once
- C语言 #include <> 与 #include “” 区别
- C语言 const 修饰函数参数
- C语言 const 和 define 区别
- C语言 #运算符
- C语言 ##运算符
- C语言 __VA_ARGS__
- C语言 ##__VA_ARGS__
- C语言 函数不定长参数 ##__VA_ARGS__经典案例
- C语言 va_start / va_end / va_arg 自定义 printf 函数
- C语言 main 函数参数 main(int argc, char *argv[])
- C语言 全局变量和局部变量区别
- C语言 static
- C语言 extern
- C/C++ Unicode 和多字节区别
- C/C++ wprintf 输出中文乱码
- C/C++ char 和 wchar_t 相互转换
- C/C++ NaN(Not a Number)
- C语言 枚举enum简介(一)
- C语言 枚举enum声明变量和使用(二)
- C语言 共用体union
ChatGPT 3.5 国内中文镜像站免费使用啦
暂无评论内容