主要内容:高级指针(结构体指针)
一、结构体指针
指向结构体变量的指针叫做结构体指针
typedef struct student Student ;
Student stu = { 0 } ;
Student *p = &stu ;
Student *:结构体类型的指针(类型)
p:结构体指针变量(变量名)
&stu:结构体变量地址(初值)
结构体访问成员变量
示例:
typedef struct {
char name[20];
char gender;
int age;
} Student;
Student stu1 = { "张平辉", ' m ' ,21};
Student stu2 = {"辉子", ' m ' ,21};
Student *p1 = &stu1;
Student *p2 = &stu2;
printf("%s %c %d",p1.name, p1.gender, p1.age); / / 方式一
printf("%s %c %d",p2 ->name, p2 ->gender, p2.age); / / 方式二
注意:(*p)对结构体取值后是结构体变量
. gender是访问成员变量
使用指针 “ -> ” 可以直接访问结构体的成员变量 p2 ->name
二、结构体数组与指针的关系
结构体数组的数组名是一个结构体指针常量
Student stus = {0};
Student *p = stus;
p 为结构体指针变量,stus为数组名,等同于 int arr[2] = {0}; int *p = arr;
结构体指针访问数组内元素使用下标
p ->数组内容 访问数组元素
(p + 1)-> 数组内容将指针向下移动所定义数组类型的字节数
(p - 1)->数组内容将指针向上移动所定义数组类型的字节数
结构体指针作为函数参数时:
函数操控结构体指针时,需要传入结构体指针首地址和元素个数
三、预编译指令
宏定义:在编译前进行替换
#define PII 3.14 / / 将PII的值定为3.14在以后程序运行期间,PII = 3.14
注意:宏不是变量
带参数的宏
示例:#define MAX ( a, b) ( a > b ? a : b ) / / 相当于一个函数
MAX ( 3, 5) / / 编译输出5
四、条件编译(不常用)
根据不同的条件编译不同的代码
三种形式:
1 #ifdef 标示符
代码段1
#else
代码段2
#endif
如果标示符被#ifdef过,执行代码段1,否则执行代码段2
2 #ifndef 标示符
代码段1
#else
代码段2
#endif
如果标示符未被#define过,执行代码段1,否则执行代码段2
3 #if 常量表达式
代码段1
#else
代码段2
#endif
如果常量表达式结果为非0执行代码段1,否则执行代码段2