您现在的位置是:首页 >技术交流 >【C/C++】函数指针网站首页技术交流
【C/C++】函数指针
简介【C/C++】函数指针
如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址
。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。函数指针有两个用途:调用函数和做函数的参数
C++函数指针(Function Pointers)是指向函数的指针变量。函数指针可以用于在程序中动态地调用不同的函数,具有很高的灵活性和扩展性。以下是关于C++函数指针的一些基本知识:
- 定义函数指针:
函数指针的定义方式类似于函数声明,只需将“函数声明”
中的“函数名”
改成“(*指针变量名)”
。但是这里需要注意的是:“(*指针变量名)”
两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。
定义方式:
函数返回值类型 (* 指针变量名) (函数参数列表);
例如:
int (*funcPtr)(int, int); // 定义一个函数指针变量 funcPtr,指向返回类型为 int,接受两个 int 参数的函数
-
初始化函数指针:
函数指针可以通过指向特定函数来进行初始化。例如:
int sum(int a, int b) { return a + b; } // 初始化函数指针并指向 sum 函数 int (*funcPtr)(int, int) = sum;
-
使用函数指针调用函数:
使用函数指针调用函数与直接调用函数类似,只需在函数指针名后加上参数列表即可。例如:
int result = funcPtr(3, 4); // 调用通过函数指针指向的函数
-
函数指针作为函数参数:
函数指针可以作为函数的参数传递给其他函数,从而实现回调函数等灵活的功能。例如:
void printResult(int (*funcPtr)(int, int), int a, int b) { int result = funcPtr(a, b); cout << "Result: " << result << endl; } printResult(sum, 3, 4); // 将 sum 函数指针作为参数传递给 printResult 函数
-
函数指针数组:
函数指针可以存储在数组中,使得可以根据需要动态选择调用不同的函数。例如:
int sum(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } // 定义函数指针数组,存储指向不同函数的函数指针 int (*funcArray[2])(int, int) = {sum, subtract}; int result = funcArray[0](3, 4); // 调用 funcArray 中存储的第一个函数指针指向的函数
函数指针在C++中是强大且灵活的工具,可以用于实现回调机制、动态函数调用等多种应用场景。请注意,函数指针的语法可能较为复杂,需要理解指针和函数声明的基本知识。
int (*fun)(int x,int y) //函数指针的定义
fun = &Function //函数指针的赋值方式1
fun = Function //函数指针的赋值方式2
x = (*fun)() //函数指针的调用方式1
x = fun() //函数指针的调用方式2
函数赋值的时候取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,并且赋值的时候函数不需要带圆括号;
如果是函数调用,还必须包含一个圆括号括起来的参数表。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。