IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言枚举和联合(共用体)大小端 -> 正文阅读

[C++知识库]C语言枚举和联合(共用体)大小端

C语言枚举和联合体

枚举

枚举类型的定义

enum Day//一星期
{
	//枚举的可能取值-常量
	Mon,//Mon的默认值是0
	Tues,//1
	Wed,//2
	Thur,//3
	Fri,//4
	Sat,//5
	Sun //6
};
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
enum Color  //定义一个枚举类型
{
	RED = 3,
	GREEN,
	BLUE,
	YELLOW = 7,
	BLACK
};
int main()
{
	enum Color color1 = RED;//创建一个枚举变量color1
	enum Color color2 =BLACK;
	int color3=BLUE;
	printf("%d %d %d %d %d %d\n", RED, GREEN, BLUE, YELLOW, BLACK,sizeof(enum Color));//3 4 5 7 8 4
	//因为常量RED的值是3,所以接下来的常量GREEN的值是4,再接下来的常量BLUE的值是5
	//又因为常量YELLOW的值是7,所以接下来的常量BLACK的值是8
	printf("color1=%d\ncolor2=%d\ncolor3=%d\n", color1, color2,color3);
	return 0;
}
输出:
3 4 5 7 8
color1=3
color2=8
color3=5

注意:枚举大小为4个字节
我们也可以用#define定义常量(符号常量)

#define RED 1
#define YRLLOW 7
#define BLUE 3

但是我们使用枚举可以增加代码的可读性,并且一次可以定义多个常量

联合(共用体)

union Un  //联合类型的声明
{
	int a; //联合成员
	char b;
};

联合的成员是共用同一块内存空间的,所以联合也叫共用体,这样一个联合变量的大小至少是最大成员的大小,因为联合至少得有能力保存最大的那个成员
联合的计算:
1.联合的大小至少是最大成员的大小
2.当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
union Un
{
	char a;
	int b;
	double c;
};
int main()
{
	printf("%d\n", sizeof(union Un));//8
	return 0;
}

在这里插入图片描述
所以a的地址和b的地址和c的地址时一样的,先下面代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
union Un
{
	char a;
	int b;
	double c;
};
int main()
{
	union Un s = { 0 };//创建一个联合变量s
	printf("%p\n%p\n%p\n",&s.a,&s.b,&s.c);
	return 0;
}
输出:
003FF998
003FF998
003FF998

既然学了联合体,就用它来判断一下当前计算机的大小端存储吧
那什么是大端小端呢?
大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位则保存在内存的低地址中.
小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位则保存在内存的高地址中
有一个2字节的short型a,在内存中的地址为0x0010,a的值为0x3344,那么0x33为高字节,0x44为低字节,对于大端模式:就将0x33放在低地址中,即0x0010中;0x44放在高地址中,即0x0011中.对于小端模式刚好相反.
这是不使用联合体的情况:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 1;//0x00000001
	char* p = (char*)&a;//强制类型转换为char*类型的指针,因为char*类型的指针解引用向后只能访问一个字节
	if (*p == 1)
	{
		//若是小端存储模式,则0x0000放在高地址中,0x0001放在内存的低地址中
		printf("当前计算机是小端模式\n");
	}
	else //*p==0
	{
		printf("当前计算机是大端模式\n");
	}
	return 0;
}

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:39:53  更:2021-11-15 15:40:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:42:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码