在C语言中,指针函数和函数指针是容易混淆但完全不同的概念:
1. 指针函数(Pointer Function)
- 本质:是一个返回指针的
函数。 - 定义:函数的返回值类型是指针类型(如
int*、char*等)。 - 示例:
int* func(int a, int b) { int* p = (int*)malloc(sizeof(int)); *p = a + b; return p; // 返回一个整型指针 }func是一个函数,返回int*类型的指针。
2. 函数指针(Function Pointer)
本质:是一个指向函数的
指针变量。定义:指针指向的是函数(存储函数的入口地址),通过它可以调用函数。
示例:
int add(int a, int b) { return a + b; } int (*pFunc)(int, int); // 定义函数指针 pFunc = add; // 指向add函数 int result = pFunc(2, 3); // 通过指针调用函数(result = 5)pFunc是一个指针,指向接受两个int参数并返回int的函数。
关键区别:
| 特性 | 指针函数 | 函数指针 |
|---|---|---|
| 本质 | 函数(返回指针) | 指针(指向函数) |
| 定义形式 ★★★ | int* func(...) |
int (*pFunc)(...) |
| 用途 | 动态内存分配、返回地址数据 | 回调函数、灵活调用不同函数 |
记忆技巧:
- 指针函数:名字是函数,返回值是指针(
*靠近类型,如int* func())。 - 函数指针:名字是指针,指向函数(
*靠近变量名,如int (*pFunc)())。
常见应用场景:
- 指针函数:返回动态分配的字符串或数组(如
char* strcpy())。 - 函数指针:实现回调机制(如
qsort库函数的比较函数)。
理解清楚两者的差异,能避免在复杂代码(如函数指针数组、回调函数)中混淆。
