C中函数指针的基本语法和思想

1.C语言中函数的调用可分为直接调用和间接调用(函数指针),具体调用方法如下:

int add(int a,int b)

{

    return a+b;

}

 

void main()

{

    add(1,2);//直接函数调用,函数名就是函数的入口地址

      

    //1.定义一个函数类型

    typedef int (myAdd1)(int ,int ); //myAdd1就是一个函数类型

    myAdd1 *p1=NULL;

    p1=&add; //这里写成p1=add也可以,这是因为C编译器是逐渐完善起来的,有兼容历史版本的原因在里面

    p1(3,4);//函数的间接调用

      

    //2.定义一个函数指针类型

    typedef int (*myAdd2)(int ,int ); //myAdd2就是一个函数指针类型

    myAdd2 p2=NULL;

    p2=&add; 

    p2(3,4);//函数的间接调用

 

    //3.直接定义一个函数指针变量

    int (*p3)(int ,int ); //myAdd2就是一个函数指针类型

    p3=&add; 

    p3(3,4);//函数的间接调用

}

 

 

2.C语言中,函数指针做函数参数的方法:

//函数的具体实现

int add1(int a,int b)

{

    return a+b;

}

 

int add2(int a,int b)

{

    return a+b;

}

 

int add3(int a,int b)

{

    return a+b;

}

 

//函数的调用,实现求1+2的和的功能

int fun(int (*padd)(int,int))

{

    padd(1,2);

}

 

//主函数里面直接调用fun()函数,用一个统一的接口实现想要的功能

void main()

{

    fun(add1);

    fun(add2);

    fun(add3);

}

 

上面通过函数指针调用函数的方法,使用一种调用形式就可以实现不同函数的调用。这种做法思想上和C++中多态的思想是相同的,好处也非常明显:定义好函数的接口之后,后来人只要根据此接口去填写自己的代码,现在的人不需要改动什么就可以轻松地调用后来人写的代码。

利用函数指针调用函数的精髓在于:函数指针类型提前做了约定。

为了解释这句话的意思,可以对比上面的实例:fun()函数的传入参数,即函数指针padd提前封装好了函数对外的接口,包括函数输入、输出参数的类型、个数(函数add1(),add2(),add3()的类型是一样的)。这样fun()函数就可以利用一个统一的函数指针形参padd去描述函数的操作,相当于把框架搭建好了,函数的调用形式被确定下来了。具体执行的时候,再根据传来的实参去回调具体的函数代码,如add1()、add2()或add3()。因此,fun()函数的传入参数padd就如同是C++中的父类指针,add1(),add2(),add3()就像是C++中的纯虚函数的具体实现。

 

转载于:https://www.cnblogs.com/jswu-ustc/p/8409029.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值