C语言中 指向函数的指针 简介
引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了。
char * fump(); //返回指向char的指针的函数 char (* frump)(); //指向返回类型为char的函数的指针 char (* flump[3])(); //由3个指针组成的数组,每个指针指向返回类型为char的函数
原来自己根本都不知道还有指向指针的函数,难怪自己懵逼了。参考了两篇博客(1.“http://blog.csdn.net/hzyong_c/article/details/7464202” 2.“http://blog.chinaunix.net/uid-22145625-id-1789465.html”),自己作一个理解和记录如下。
1.函数是可以被指针指向的
函数在编译时会被分配一个入口地址,调用函数其实就是通过 指向函数入口地址的指针 进行的。
2.函数指针变量 的 声明、定义与调用
声明格式为:返回类型 (*函数指针变量) (参数列表)
例如: int (* FunPtr) (int, int) 。该例子中,FunPtr为函数指针,指向的函数是这样的---输入两个int返回一个int。
定义格式为:返回类型 (*函数指针变量) (参数列表)
例如: FunPtr = ∑ //sum是一个相符的函数,即int sum(int, int);
调用格式为:(* 函数指针变量) (参数列表)
例如:b = (* FunPtr) (3, 5);
/* 为了体验函数指针的声明、定义和调用 */ #include <stdio.h> int sum(int, int); int main (void) { int a, b; int (* FunPtr) (int, int); //声明 FunPtr 是指向函数的指针,指向的函数具有两个int输入和一个int输出 FunPtr = & sum; //定义 FunPtr 指向的地址为函数 sum 的入口地址 a = sum(3,7); b = (* FunPtr) (3, 7); //调用函数指针 FunPtr printf("sum(3,7) = %d.\n(*FunPtr)(3,7) = %d\n", a, b); return 0; } int sum(int x, int y) { return (x+y); }