首页 > 代码库 > C语言中 指向函数的指针 简介

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);
}

 

C语言中 指向函数的指针 简介