【c语言】枚举、联合,大小端

1.枚举

1)概念

将可能的取值一一列举。它没有内存对齐的机制。
eg:

enum Color
{
	RED,//0
	BLUE,//1
	GREEN//2
};

如上所示,enum Color就是一个枚举类型。
{}中的内容是枚举类型的可能取值,也叫枚举常量。这些可能取值都是有值得,默认从0开始,一次递增1,当然在定义时也可以赋初值。

2)枚举的优点

1.增加代码的可读性和可维护性
2.和#define定义的标识符计较枚举有类型检查,更加严谨
3.防止了命名污染
4.便于调试
5.使用方便,一次可以定义多个常量

2.联合

1)概念

联合也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)
eg:


//声明
union Un
{
	char c;
	int i;
};
//联合变量的定义
union Un un;

2)联合的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(很简单的原因:因为联合要有保存最大成员的能力)

3)联合大小的计算

联合的大小至少是最大成员的大小。

 union UN
{
	char c;
	double b;
	int a;
};
int main()
{
	union UN Un;
	printf("%d ", sizeof(Un));//8
	system("pause");
	return 0;
}

当最大成员不是最大对齐的整数倍的时候,就要对齐到最大对齐数的整数倍。

内存对齐知识请点击此处

union Un
{
  int a;//最大对齐数4
  char c[5];//最大对齐数1
};
int main()
{
	union UN Un;
	printf("%d ", sizeof(Un));//8
	system("pause");
	return 0;
}

3.大小端解释

1)大端模式

是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

2)小端模式

是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
如图所示:
这里写图片描述

3)判断大小端

a.普通方法判断大小端

取出a的地址char* 取出一个字节,解引用* ,如果为1则为小端存储,否则为大端存储。

int check()
{
	int a = 1;
	return *(char*)&a;

	//if (*(char*)&a == 1)//char * 取出一个字节
	//	return 1;//小端
	//else
	//	return 0;
}
b.联合的方法
union UN
{
	char c;
	int a;
};
int check1()
{
  union UN un={0};
  un.a =1;
  return un.a;//返回1为小端
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值