1.泛型指针的定义
类型声明:
void * 是一个无类型指针,可以指向任意类型的数据的地址
eg.
1 | int a = 10; |
2.核心特点
(1)通用型
可以接受任何数据类型的地址
1 | void *p; |
(2)不能直接解引用
void* 指针没有类型信息,直接引用可能会导致编译错误
1 | int x = 10; |
(3)指针运算限制
void* 指针不能直接进行算术运算(如 p++),因为编译器不知道步长:
1 | int arr[3] = {1, 2, 3}; |
3. 使用场景
(1) 通用函数设计
示例:实现一个遍历数组的通用函数(如问题中的 ForEach):
1 | void ForEach(void *arr, int elem_size, int num, void (*func)(void*)) |
(2) 内存操作函数
C 标准库中的 memcpy 和 memset 使用 void* 实现通用内存操作:
1 | void* memcpy(void *dest, const void *src, size_t n); |
(3) 动态数据结构
在链表、树等数据结构中,void* 可存储任意类型的数据:
1 | struct Node{ |