C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针

news2024/11/13 7:21:49

C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针

第一节 C 语言基础以及基本数据类型
第二节 C 语言运算符
第三节 C 语言控制语句
第四节 C 语言自定义函数
第五节 C 语言修饰变量的关键字
第六节 C 语言构造数据类型–数组
第七节 C 语言字符串
第八节 C 语言指针
第九节 指针与函数、指针函数、函数指针
第十节 数组与指针、二级指针&NULL&void 指针
第十一节 结构体
第十二节 链表
第十三节 共用体union,枚举enum,宏定义#define,条件编译,const与指针
C语言–图书管理项目


文章目录

  • C语言入门系列 - 共用体union,枚举enum,宏定义#define,条件编译,const与指针
  • 一、共用体
    • 大小端判断代码
  • 二、枚举
  • 三、宏定义
  • 四、条件编译
  • 五、const 和指针
  • 总结


一、共用体

共用一块内存空间
共用体也是一种自定义数据,先定义这种数据类型。

union 共用体名字
{
  成员类型 成员名;
  成员类型 成员名;
}
union Data
{
  char ch;
  int a;
};
共用体的类型:union Data
定义共用体变量: union Data d1;
使用通过点语法:d1.a = 10; d1.ch = ‘a’;

共用体所占空间大小:占用空间最大的成员的类型所占字节数。

小端模式:数据的高字节,存放在高地址中。计算机读取数据的方向,是从高地址开始读取的;
大端模式:数据的高字节,存放在低地址中。计算机读取数据的方向,是从低地址开始读取的;

大小端判断代码

#include<stdio.h>
union Data
{
	char ch;
	int a;
};
int main()
{
	union Data d1;
	// 看成员在内存里面的位置
	printf("%p %p\n",&d1.a,&d1.ch);
	printf("%d",sizeof(d1));
	d1.a = 0x12345678;		//在字节中是12这边高字节,向右逐渐变低。即78为低字节
							//高字节为:0x12			低字节为:0x78
	if(d1.ch == 0x78)
	{
		printf("小端");	//低地址放低字节,存放的是78563412。所以第一个字节是78的话就是低地址存放高字节
	}
	else
	{
		printf("大端");	//低地址放高字节,存放的是12345678。所以第一个字节是78的话就是低地址存放高字节
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

二、枚举

增加代码的可读性
枚举也是一种数据,自定义的数据类型
将所有的可能结果罗列数来使用标识符代替

代码如下(示例):

#include<stdio.h>
// enum week{MON=1,TUS,WED,THIR=5,FRI,SAT,SUN};
enum light{RED,GREEN,YELLOW};
int main()
{
	// printf("%d %d %d %d %d %d %d",MON,TUS,WED,THIR,FRI,SAT,SUN); // 0  1  2
	// 用户输入 -- 0--红灯  1--绿灯  2--黄灯
	// 枚举类型声明变量
	enum light led;
	printf("请输入当前的交通灯的颜色:0-红灯 -- 1-绿灯 -- 2代表黄灯");
	scanf("%d",&led);
	switch(led)
	{
		case RED:
			// ARR<< 3 | xx;
			printf("红灯");
			break;
		case GREEN:
			// ARR<< 2 | xx;
			printf("绿灯");
			break;
		case YELLOW:
			// ARR<< 1 | xx;
			printf("黄灯"); 
			break;
	}
	return 0;
}


三、宏定义

#define 标识符 表达式
#define PI 3.14

宏定义和变量区别
宏定义是在预处理的时候进行替换,不会做运算,不需要开空间
变量定义是在程序运行时开空间

代码如下(示例):

#include<stdio.h>
#define PI 3.14 
#define ADD  3 + 2
#define ADD1 (3+2)

#define MAX(a,b) (a > b ? a : b)

int main()
{
	printf("%f\n",PI);
	
	printf("%d\n",3*ADD); // 3 * 3 + 2
	printf("%d\n",3*ADD1); // 3 *(3+2)
	
	printf("%d\n",MAX(3,10)); // 3 > 10 ? 3 : 10
	return 0;
}

为了防止某个头文件的重复包含可以定义一个宏名 用于标识当前这个文件是否已经被项目中的其他文件引入
led.h

#ifndef __LED_H
#define __LED_H
#include<led.h>

#endif

四、条件编译

条件编译
#ifdef 宏名   //有宏定义这个宏名,则执行代码段1
 代码段1
#else      //非则执行代码段2
 代码段 2
#endif

代码如下(示例):

include<stdio.h>

#define v1
//#define v2

int main()
{
	#ifdef v1
		printf("界面1\n");
	#else
		printf("界面2\n");
	#endif
	printf("支付功能\n");
		
	return 0;
}

五、const 和指针

const 常量 ---- 常量区
const int n = 5; // 常量在进行定义的是必须要给值

const 可以修饰指针指向的空间
const 指向对象的数据类型 *指针名;
指针指向的空间是只读的,不能通过 *p 进行修

不可以修改空间内容,但可以改变指向

	const int n = 5;
	const int *p = &n;		//修饰指针指向的空间
	//*p = 10;		//不可以修改空间内容,会报错
	
	const int a = 9;
	p = &a;			//但可以修改指针指向
	
	printf("%d",*p);

const 修饰指针本身的空间。
指向对象的数据类型 *const 指针名;
int n = 10;
int *const p = &n

	int n = 10;
	int m = 20;
	
	int *const p = &n;		//修饰指针本身的空间
	
	printf("%d",*p);
	*p = 25;
	printf("%d",*p);
	
	//p = &m;		//报错,指针不可以改变指向

const 指向对象类型 * p;
  指针指向对象是只读的, * p 是只读的。
指向对象类型 * const p;
  指针空间是只读的,p 是只读

const 指向对象类型 * const p; p 和*p 都是只读的

总结

C语言总体知识点大概完成了,接下来会借着图书馆里项目操作下文件的保存以及初始化。

d1.a = 0x12345678; //在字节中是12这边高字节,向右逐渐变低。即78为低字节
if(d1.ch == 0x78)
{
printf(“小端”); //低地址放低字节,存放的是78563412。所以第一个字节是78的话就是低地址存放高字节
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建型模式

创建型模式 创建型模式对类的实例化过程进行了抽象&#xff0c;能够将软件中对象的创建和使用分离&#xff0c;使整个系统的设计更加符合单一职责原则。 什么是对象的创建与对象的使用分离&#xff1f; 一个女生想吃苹果&#xff0c;怎么办&#xff1f; 对象的创建和对象的使用…

TC275——04Blinky-LED

项目工程框架 项目驱动文件这个见过&#xff0c;三个main文件真的是开了眼&#xff0c;一个main代表一个核吗&#xff1f; 按照以往对实现LED闪烁的流程&#xff0c;一般是先配置时钟、再配置IO、延时&#xff0c;实现反转效果。 Blinky_LED.c 在驱动文件里&#xff1a; /*…

数据分析 -Hive学习 Day5

HIVE 核心技能之窗口函数 大家好呀&#xff0c;这节课我们学习 Hive 核心技能中最难的部分——窗口函数。窗口函数我们之前在学 MySQL 的时候有学过一些&#xff0c;但是只学了三个排序的窗口函数。这节课我们会学习更多的窗口函数&#xff0c;包括累计计算、分区排序、切片排…

nvm中node包管理器在windows中的使用

你要使用的 1/nuvm 只能在Linux 和 OS X 2/推荐使用nvm-windows&#xff0c;git上&#xff0c;我认为还可以就使用 操作 1/下载的git地址nvm-windows 2/好像要清除掉所有node&#xff0c;是个注意点 3/安装 4/路径上不允许存在空格&#xff0c;否则后面会各种报错 5…

读书笔记《硬件十万个为什么——开发流程篇》

大家好,这里是大话硬件。 今天想给大家分享上周末在家写的读书笔记,内容来源于重读《硬件十万个为什么——开发流程篇》这本书的一些启发和总结。 1. 为什么我要重读这本书籍? 这本书收到快递的时间是2022.8.26,拆开快递的那个晚上大约花了2个小时从头到尾快速浏览了一次…

(创建失败)小米万兆路由器里的Docker安装Redis7.0

小米2022年12月份发布了万兆路由器&#xff0c;里面可以使用Docker。 今天尝试在小米的万兆路由器里安装Redis7.0。 创建失败&#xff0c;有时间时确认是否可以解决。 Server cant set maximum open files to 10032 because of OS error: Operation not permitted. Current m…

【STM32 Cortex-M4核中断实验】

STM32 Cortex-M4核中断实验实验要求MX相关设置LED设置按键设置光电开关&#xff0c;火焰传感器&#xff0c;人体红外设置UART4设置代码编写结果测试实验要求 使用M4核开发 PF7/PF8/PF9/PF5/PF12/PE15检测中断 要求1&#xff1a;当中断到来时&#xff0c;LED灯状态取反 要求2&a…

EpilepsyGAN:具有隐私保护的合成癫痫脑活动-2021(同26)

EpilepsyGAN: Synthetic Epileptic Brain Activities with Privacy Preservation Abstract 癫痫是一种慢性神经系统疾病&#xff0c;影响全世界6500多万人&#xff0c;表现为反复发作的无端癫痫发作。癫痫发作的不可预测性不仅会降低患者的生活质量&#xff0c;而且还可能危及…

【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍

唯有热爱&#xff0c;可抵岁月漫长&#xff0c;唯有热爱&#xff0c;不畏世间无常&#xff01; 少年不曾迷茫&#xff0c;展翅飞往神域&#xff0c;坚定初心&#xff0c;踏实行动。 新的一年&#xff0c;收下少年的祝福&#xff0c;一起踏上新道路。 &#x1f4aa;(ง •_•)…

Spring Boot 日志文件

1.日志有什么用&#xff1f; ⽇志是程序的重要组成部分&#xff0c;想象⼀下&#xff0c;如果程序报错了&#xff0c;不让你打开控制台看⽇志&#xff0c;那么你能找到报错的原因吗&#xff1f;答案是否定的&#xff0c;写程序不是买彩票&#xff0c;不能完全靠猜&#xff0c;…

Blender 非线性编辑器

文章目录非线性编辑器介绍动画摄影表/动作编辑器与非线性编辑器NAL非线性编辑器基本操作复制动画片段混合动画片段动画片段N键菜单活动片段栏回放剪辑栏非线性编辑器介绍 1 非线性编辑器是动画制作的一部分&#xff0c;类似于PR的轨道&#xff0c;可以合并多个不同的动画动作 …

【回答问题】ChatGPT上线了!推荐30个以上比较好的构建知识图谱源码

在此列出30个比较好的构建知识图谱的源码&#xff1a; Neo4j AgensGraph JanusGraph AnzoGraph Cayley GraphDB ArangoDB FlockDB OrientDB Redis Graph Virtuoso TigerGraph HyperGraphDB Titan Stardog GraphQL GRAKN.AI AllegroGraph Blazegraph Google Cloud Bigtable Apa…

10四个基本子空间

四个基本子空间 四个基本空间介绍 对于一个 m*n 矩阵 A 来说&#xff0c;以下四个基本空间是其基础。 2.1 四个基本空间的维数与基 还是研究 m*n 的矩阵 A&#xff0c;其四个子空间的基本性质如下: &#xff08;1&#xff09;列空间 之前介绍过列空间的基&#xff0c;设矩…

Go语言 值传递 引用传递 修改集合中的值

分类看一下Go的值传递和引用传递&#xff1a; 值传递&#xff1a;将值传递给函数 /* 引入单测包 */ import ("testing" )func TestSwap(t *testing.T) {x : 100y : 200swap(x, y)println("x:", x)println("y:", y) }/* 定义相互交换值的函数 *…

自己编译docker镜像

有时候官方现在的docker镜像并不能很好地符合自己的需求&#xff0c;我们需要自己定制。以下我主要是在官方mariadb:latest镜像的基础上&#xff0c;做一些定制化的操作如修改容器的编码格式。 /root/.pip目录下有两个文件&#xff1a; Dockerfile的文件内容如下&#xff1a;…

性能优化系列之你是否清楚浏览器的渲染过程?

文章の目录1、浏览器解析 HTML&#xff0c;生成 DOM Tree&#xff08;Parse HTML&#xff09;。2、浏览器解析 CSS&#xff0c;生成 CSSOM&#xff08;CSS Object Model&#xff09; Tree。3、JavaScript 会通过 DOM API 和 CSSOM API 来操作 DOM Tree 和 CSS Rule Tree&#x…

Docker安装Kibana整合Elasticsearch[包含账号密码设置]

文章目录一&#xff1a;拉取Es和Kibana镜像二&#xff1a;创建Es挂载目录2.1&#xff1a;挂载相关配置2.2&#xff1a;开放文件权限&#xff0c;否则后面运行容器会报错三&#xff1a;运行Es容器3.1: 运行参数说明3.2: 运行容器命令3.3: 开放防火墙四&#xff1a;运行Kibana容器…

十四、Kubernetes中pod配置详解、实例

1、概述 在kubernetes中基本所有资源的一级属性都是一样的&#xff0c;主要包含5部分&#xff1a; apiVersion <string> 版本&#xff0c;由kubernetes内部定义&#xff0c;版本号必须可以用 kubectl api-versions 查询到 kind <string> 类型&#xff0c;由kuber…

我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT

最近有朋友跟我吐槽&#xff0c;9月10月辛辛苦苦做了一个多月的项目&#xff0c;是一个重点项目&#xff0c;自己还是开发主力&#xff0c;但年底组长用来写了晋升PPT&#xff0c;汇报的时候还写的可圈可点&#xff0c;完全就是他做的样子。 目录 1、我也曾盼望升职加薪 2、结…

【阶段二】Python数据分析NumPy工具使用03篇:数组的预处理、数组形状更改、数组转置与数组合并

本篇的思维导图: 数组的预处理 数据的类型转换 代码 结果 import numpy as