C++八股 —— 函数指针与指针函数
文章目录
- 1. 函数指针(Function Pointer)
- 2. 指针函数(Pointer Function)
- 3. void* func() 的作用
- 4. 注意事项
函数指针(function pointer)和指针函数(pointer to function)是两个不同的概念。
1. 函数指针(Function Pointer)
-
定义:指向函数的指针变量,保存函数的地址。
-
用途:用于动态调用函数(如回调机制、策略模式)
-
语法示例:
return_type (*pointer_name)(parameters)
如:
int (*funcPtr)(int, int)
是一个指向返回值类型为int
,参数为两个int
的函数的指针。
2. 指针函数(Pointer Function)
-
定义:返回值是指针类型的函数。
-
用途:返回动态内存、数组或对象地址。
-
语法示例:
int* createArray(int size) { return new int[size]; } int* arr = createArray(10); // 调用指针函数获取动态数组
3. void* func() 的作用
- 定义:返回
void*
(无类型指针)的函数。 - 关键特性:
- 通用性:可返回任意类型的指针(如
int*
、char*
等),但需显式类型转换后才能使用。 - 典型用途:
- 实现泛型编程(如C标准库的
malloc
)。 - 隐藏具体类型细节(如操作系统API返回句柄)。
- 实现泛型编程(如C标准库的
- 通用性:可返回任意类型的指针(如
-
示例:
void* allocateMemory(size_t size) {return malloc(size); // 返回void*类型的内存地址 } int* buffer = (int*)allocateMemory(100 * sizeof(int)); // 显式转换类型
4. 注意事项
- 函数指针的兼容性:
- 需严格匹配函数签名(参数类型、返回类型)。
- C++中建议优先使用
std::function
或lambda
替代原生函数指针。
- 指针函数的内存管理:
- 返回动态内存时,需明确所有权(调用者负责释放)。
- void*的安全风险:
- 必须手动类型转换,避免未定义行为。
- C++中推荐使用
模板
或继承
实现类型安全替代。
参考:
- DeepSeek
- 函数指针和指针函数的区别-CSDN博客