函数也是存放在一段连续的地址空间的!
与数组相似,子函数也是存放在一段连续的地址空间,所以子函数也可以通过访问函数名(等同于访问数组名)调用,这种方法称为函数指针。
具体方法为:把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。
以下例子可以较为清晰的说明:
#include <stdio.h>
//返回两个数中较大的一个
int max(int a, int b){
return a>b ? a : b;
}
int main(){
int x=20, y=5, maxval;
//定义函数指针
int (*pmax)(int, int); //也可以写作int (*pmax)(int a, int b)
//或者直接省略下一行,写成:int (*pmax)(int, int) = max;
pmax=max;//把函数max的首地址存放在pmax里面,则通过*pmax可以调用到函数max
printf("Input two numbers:");
maxval = (*pmax)(x, y);//此处(*pmax)(x, y)==max(x,y)
printf("Max value: %d\n", maxval);
return 0;
}
输出为:
Input two numbers:Max value: 20