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

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
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;
}

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

二、枚举

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

代码如下(示例):

#include
// 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
#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

#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的话就是低地址存放高字节
}

你可能感兴趣的:(C语言,c语言)