在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
库函数的比较函数)。
理解清楚两者的差异,能避免在复杂代码(如函数指针数组、回调函数)中混淆。