前言
本文主要记录一下对联合体和大小端的一些自我理解,如果有不足的地方还请大家提出指正,如果对你有帮助我十分开心,大家一起进步。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是联合体,什么是大小端?
先来讲一下大小端吧:
在计算机中数据的存储方式有大小端的区别,定义小端就是将数据的高位存在高地址的内存,低位存在低地址的内存中的方式,常见的计算机系统都是小端模式,部分如PowerPC是大端模式;而大端模式就与小端模式刚刚相反,数据的高位存在低地址内存中,假设我们定义一个数int num=0x11223344;那么采取大小端方式储存的内存图如下:
再来讲一下联合体的概念:
C语言中的联合体(Union)是一种特殊的数据类型,允许在同一内存空间中存储不同类型的数据。与结构体类似,联合体也可以由多个成员变量组成,但不同的是,联合体的成员变量共享同一块内存空间。
以下是关于C语言联合体的一些要点:
- 定义联合体:使用
union
关键字定义联合体,并在大括号内定义成员变量。例如:
union MyUnion {
int i;
float f;
char c;
};
-
内存共享:联合体的所有成员变量共享同一块内存空间,因此在任意时刻只能存储其中的一个成员的值。该内存空间的大小取决于联合体中最大的成员变量。
-
成员访问:可以使用点操作符(
.
)来访问联合体的成员变量。然而,只能同时访问一个成员变量,访问其他成员会导致之前存储的值被覆盖。 -
节省内存:联合体可以在一段内存空间中存储不同类型的数据,这在某些情况下可以节省内存空间。因此,联合体常用于表示不同类型的数据或实现数据类型转换。
下面是一个示例,展示了如何使用联合体:
#include <stdio.h>
union MyUnion {
int i;
float f;