目录
一、函数指针与指针函数
int* functionPtr(int, int); //这是指针函数,即函数返回一个指针
functionPtr(int, int) -> int*
int (*functionPtr)(int, int); //这是函数指针,即声明一个指向函数的指针
*functionPtr -> int (int,int)
函数调用规则
#include <stdio.h>
int add(int x, int y) {
return x + y;
}
int main() {
int (*functionPtr)(int, int);
functionPtr = add;
// 使用 (*functionPtr)(3, 4) 或 functionPtr(3, 4) 是等效的
printf("Result: %d\n", (*functionPtr)(3, 4)); // 输出 7
printf("Result: %d\n", functionPtr(3, 4)); // 输出 7
return 0;
}
在函数调用的时候因为C语言的语法规则要求函数调用的括号必须紧跟在函数指针或函数名之后,而不是在指针解引用之后。functionPtr
本身就是一个指向函数的指针,不需要使用*
来解引用。当你写functionPtr(3, 4)
时,C编译器知道你正在调用functionPtr
所指向的函数,并传递参数3和4给该函数。
但是在输出时使用(*functionPtr)(3, 4)
是可以的,因为这是一种函数指针的正确用法。在这种情况下,(*functionPtr)
表示对函数指针的解引用,然后(3, 4)
表示函数调用,传递参数3和4给被解引用的函数指针所指向的函数。这与functionPtr(3, 4)
的效果是一样的。
int result = functionPtr(3, 4);