在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库函数的比较函数)。

理解清楚两者的差异,能避免在复杂代码(如函数指针数组、回调函数)中混淆。