指向函数的指针变量

1. 说明:

函数在编译时会被分配给一个入口地址, 而指针变量用于存放地址(指针), 所以可以使用指针来指向函数并调用该函数, 这个指针就是函数指针 .

2. 定义 :

类型名 (*指针变量名)  (函数参数列表)

3. 注意 :

1) 定义指向函数的指向变量, 并不意味其能指向任何函数, 而是只能指向定义时指向的类型函数 .

2) 若需要用指针调用函数, 必须先使用指针变量指向该函数 .

3) 给函数指针变量赋值时, 只需给出函数名而不用给参数 (eg: Funptr &sum) . 

4) 若 ptr 指针指向某个函数, 则除了使用函数名调用函数外, 还可使用 (*ptr) 代替函数名, 后面和使用函数名调用函数一样的, 需要给出调用的参数, 若有返回值同样和调用函数一样接收返回值即可 .

5) 一般的指针是可以进行相关算数运算的(eg: "ptr++"), 但函数指针是不可以进行任何算数运算的 . 

4. 优点 :

使用函数名调用函数, 只能调用所指向的一个函数, 而通过指针变量调用函数比较灵活, 其可根据不同情况先后调用不用函数 .

5. 案例及详细分析 :

#include <stdio.h>

// 声明 sum 函数 (也叫函数签名) 
int sum(int,int);

int main (void)
{
    int a, b;
    
    /*类似 main 函数上的 sum 函数的声明一样, 声明 FunPtr函数指针变量 
    (也可以理解为FunPtr的函数签名,其指向的函数具有两个整数输入和一个整数输出)*/
    int (* FunPtr) (int, int);    
    
    /*类似 main 函数下的 sum 函数的正式定义一样, 正式定义 FunPtr 函数
    指针指向的地址为函数 sum 的入口地址 . */
    FunPtr = & sum;
    
    // 用于对比的测试数据 a 
    a = sum(3,7);         
        
    // 调用函数指针 FunPtr (引用指针函数和引用指针变量都是一样的, 必须使用: "*")
    b = (* FunPtr) (3, 7);        

    printf("sum(3,7) = %d.\n(*FunPtr)(3,7) = %d\n", a, b);
    return 0;
}
// 正式定义 sum 函数 : 
int sum(int x, int y)
{
    return (x+y);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值