一、结构体指针
1. 基本概念
- 结构体是用户自定义的数据类型,它可以包含多个不同类型的成员变量。使用结构体指针可以更方便地操作结构体数据。
ptr
是一个指向struct Person
的指针,使用->
运算符可以方便地访问结构体成员。
2. 动态分配结构体内存
- 可以使用
malloc
函数为结构体动态分配内存,这样可以在运行时创建结构体实例。
- 这里使用
malloc
分配内存,使用strcpy
复制字符串到name
成员,使用free
释放内存。
二、空类型指针(void 指针)
1. 特性
void
指针可以指向任何类型的数据,但不能直接解引用,因为编译器不知道它所指向的对象类型。
2. 类型转换
- 需要将
void
指针转换为具体类型的指针后才能解引用。
3. 函数参数中的应用
- 常用于函数参数,当函数需要处理不同类型的数据时。
printValue
函数使用void
指针接收不同类型的数据,根据type
参数进行相应的类型转换和解引用。
三、qsort 函数
1. 快速排序函数的使用
qsort
是 C 语言标准库函数,用于对数组进行快速排序。它需要四个参数:数组指针、元素数量、元素大小和比较函数。
compare
函数是一个比较函数,它接受两个const void *
指针,需要将它们转换为具体类型指针进行比较。qsort
根据compare
函数的返回值进行排序,负数表示a < b
,正数表示a > b
,0 表示a == b
。
2. 排序不同类型的数据
qsort
可以排序任何类型的数据,只需要提供相应的比较函数。
四、共用体指针
1. 基本概念
- 联合体是一种特殊的数据结构,它的所有成员共享同一块内存空间,不同成员可以存储不同类型的数据,但同一时间只能存储一个成员。
- 这里修改一个成员的值会覆盖其他成员的值,因为它们共享内存。
2. 共用体指针
- 可以使用联合体指针来操作联合体数据。