大小端存储、共用体/联合体、枚举类型

本文介绍了计算机科学中的大端和小端存储方式,解释了这两种存储方式的区别,并探讨了共用体(联合体)及枚举类型的使用方法。

1、大端存储
高位存低地址中,低位存高地址中。假设一页纸上的方格从左到右是地址递增的,那么顺序写下一串数字就是大端存储。
2、小端存储
高位存在高地址中,低位存在低地址中。相当于把数字反转写在纸上,前提是从左到右地址为递增。
3、共用体\联合体
共用体也可以叫做联合体。共用体的所有成员都共用同一段内存空间,对后一个成员赋值时会覆盖前一个成员的值
例:
typedef union
{
unsigned int u;
struct
{
unsigned char a :1;
unsigned char b :1;
unsigned char c :6;
unsigned char d :1;
} ST;
}UN;
结构体变量a、b、c、d共用了整形变量u的空间,其中a~d是从低位到高位排列。a占用第1位,b占用第2位,c占用3-8位,d占用第9位。
u:0000 0000 0000 0000 0000 000d cccc ccba

3、枚举类型
枚举类型定义的变量的值,只能在枚举定义的那几种值里面取值。

### C语言中 Union 共用体重构以支持多种数据类型 在C语言中,`union`(共用体)提供了一种在同一内存位置存储不同类型数据的方法。由于联合体内的所有成员共享同一块内存区域,这使得程序可以在不同情况下使用不同的数据类型而无需额外的空间开销。 #### 声明和定义联合体 为了创建能够兼容处理多个数据类型的联合体,首先需要声明并定义该联合体: ```c #include <stdio.h> // 定义一个可以容纳不同类型数值的联合体 typedef union { int integer; float floating_point; char character; } MultiTypeData; void display(MultiTypeData data, char type) { switch (type) { case 'i': printf("Integer value is %d\n", data.integer); break; case 'f': printf("Floating point value is %.2f\n", data.floating_point); break; case 'c': printf("Character value is %c\n", data.character); break; default: printf("Unknown type.\n"); } } int main() { MultiTypeData myData; // 使用整型赋值 myData.integer = 42; display(myData, 'i'); // 修改为浮点数 myData.floating_point = 3.14; display(myData, 'f'); // 更改为字符 myData.character = 'A'; display(myData, 'c'); return 0; } ``` 上述代码展示了如何利用 `MultiTypeData` 联合体来保存三种不同类型的值:整数、浮点数以及单个字符。每次当向联合体成员之一赋予新值时,其他成员的内容会被覆盖,因为它们都指向相同的物理地址[^1]。 值得注意的是,在实际应用中应当小心管理联合体内各个字段之间的转换逻辑,确保不会因误操作而导致未定义行为或错误的结果。通常建议配合枚举或其他机制一起使用,以便更好地跟踪当前正在使用的具体类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值