掌握:1)指针 2)结构体指针 3)宏定义 了解:Typedef、宏定义、条件编译、内存操作
c语言指针:
指针的基本操作:
定义指针 写入数据 移动指针 数据调用
指针、数组都是在RAM空间中占用内存,只是表达的方式不同;
指针更有灵活性,不固定空间大小,可以游走于更大的空间;
数组需要事先固定一个空间区域,只能在区域内操作。
注意:
*用于相乘运算,也用于指针
推荐视频(韩学姐):
【C指针】十分钟、你要是听不懂、我当场就把这个编译器......_哔哩哔哩_bilibili
是不是一直搞不懂C语言的指针,看完这个动画,你就全明白了_哔哩哔哩_bilibili
结构体指针:一个指针变量指向结构体
struct 结构体名 *变量名;
结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&。
//结构体 struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1 = { "Tom", 12, 18, 'A', 136.5 }; //结构体指针 struct stu *pstu = &stu1;
通过结构体指针可以获取结构体成员:(*pointer).memberName或pointer->memberName
结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员
宏定义:预处理指令
无参宏定义:#define 标识符 替换列表,如#define pi 3.14
带参宏定义:#define 标识符(参数1,参数2,...,参数n) 替换列表,如#define MAX(a,b) ((a)>(b)?(a) : (b))
typedef:定义一种类型的新别名,不同于宏定义
typedef (int*) pINT; 与 #define pINT2 int* 区别:
pINT a,b;
int *a; int *b;表示定义了两个整型指针变量 (typedef)
int *a, b;表示定义了一个整型指针变量a和整型变量b (define)
条件编译
(1)#if 条件表达式
程序段1
#else
程序段2
#endif
(2)#ifndef 标识符
#define 标识符 替换列表
//...
#endif
(3)#if 条件表达式1
程序段 1
#elif 条件表达式2
程序段 2
#else
程序段3
#endif
(4)#ifdef 标识符
程序段
#endif
内存操作函数:(40条消息) c语言内存操作函数汇总_pfgmylove的专栏-CSDN博客_内存操作函数
在内存区域进行基于字节的工作
单片机的地址与状态:
软件=地址+状态->硬件
GPIO接口:用于电信号在电路中的输入输出,以方便控制电路部件,通俗讲是芯片上的引脚
对于STM32103ZEF:共七组IO口,每组IO口有十六个IO,共112个IO口
GPIO基本结构图:
【洋桃电子】洋桃补习班(为0基础的初学者补足基础知识)STM32入门100步系列视频_哔哩哔哩_bilibili