c语言的函数指针举个例子

Python021

c语言的函数指针举个例子,第1张

函数指针告诉CPU下一步需要执行哪里的代码的指针, 一数组十分相像.

#include <stdio.h>

void function(int i, double d)    //一个函数的声明

{

    printf("函数运行, %d, %lf\n", i, d)

}

void AnotherFunction(int i, double d)    //另外一个函数声明

{

    printf("又一个函数运行, %d, %lf\n", i, d)

}

int main()

{

    void (*pFun)(int, double)    //定义了一个函数指针

    int (*p)(int , double)    //用于调试的函数指针

    pFun = function    //让这个函数指针指向第一个函数

    pFun(10, 10.101)    //通过这个函数指针来调用第一个函数

    

    pFun = AnotherFunction    //让这个函数指针指向第二个函数

    pFun(20, 20.202)    //通过这个函数指针来调用第二个函数

    

    //若将以下代码取消注释, 就会产生错误

    /*

    p = function

    p = AnotherFunction

    //原因很简单, 因为p是必须指向一个返回值为int, 第一个参数为int, 第二个参数为double的函数, 但是在此代码中定义的函数返回值是void

    */

    

    //这个实验中, 直接用函数名来赋值了, 是因为函数名其实就是这个函数的指针

    //而在平常调用函数时, 都要加上(), 如:printf("")

    //这里, "()"就相当于'*'(就是取值运算符), printf是函数指针, 就相当于是数组名, 即数组的首地址

    

    return 0

}

int

(*p)(参数表列)这个是定义一个指向函数的指针,返回值为整型。比如int

max(int

a,int

b)将max换成(*p)

即可,p里放的是max函数的入口地址,所以,此时的p做自加自减等运算无意义。不能用*(p+1)表示函数的下一条指令。

int

*p()是函数,此函数的返回值是个指向整型变量的指针变量。

***************************************************

以上是你需要的,下面是一些其它相关容易混淆的:

int

*p[n]:定义指针数组P,它由n个指向整型数据的指针元素组成。

int

(*p)[n]:P为指向含n个元素的一维数组的指针变量。