基本介绍
1)一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址, 这和数组名非常类似。
2) 把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域 然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。
函数指针定义
returnType (*pointerName)(param list);
1)returnType 为函数指针指向的函数返回值类型
2)pointerName 为函数指针名称
3)param list 为函数指针指向的函数的参数列表
4)参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称
5)注意( )的优先级高于*,第一个括号不能省略,如果写作 returnType *pointerName(param list);就成了函数原型, 它表明函数的返回值类型为 returnType *
应用案例
用函数指针来实现对函数的调用, 返回两个整数中的最大值.
#include <stdio.h>
//说明
//1. max 函数
//2. 接收两个 int ,返回较大数
int max(int a, int b){
return a>b ? a : b;
}
int main(){
int x, y, maxVal; //说明 函数指针
//1. 函数指针的名字 pmax
//2. int 表示 该函数指针指向的函数是返回 int 类型
//3. (int, int) 表示 该函数指针指向的函数形参是接收两个 int
//4. 在定义函数指针时,也可以写上形参名 int (*pmax)(int x, int y) = max;
int (*pmax)(int , int ) = max; //
printf("Input two numbers:");
scanf("%d %d", &x, &y);
// (*pmax)(x, y) 通过函数指针去调用 函数 max
maxVal = (*pmax)(x, y);
printf("Max value: %d pmax=%p pmax 本身的地址=%p\n", maxVal, pmax, &pmax);
return 0;
}
本文详细介绍了函数指针的基本概念,包括其作为函数内存区域首地址的特性,以及如何定义和使用函数指针。通过一个实际案例展示了如何利用函数指针找到并调用函数,实现求两个整数中最大值的功能。函数指针使得动态调用函数成为可能,增强了程序的灵活性。
1158

被折叠的 条评论
为什么被折叠?



