指向函数的指针

#include <stdio.h> // 添加stdio.h头文件以使用printf

int inc(int a) {
    return (++a);
}

int multi(int *a, int *b, int *c) {
    return (*c = *a * *b);
}

typedef int(FUNC1)(int in);
typedef int(FUNC2)(int *, int *, int *);

void show(FUNC2 fun, int arg1, int *arg2) {
    FUNC1 *p = &inc; // 定义指向inc函数的函数指针p
    int temp = p(arg1); // 调用inc函数,将arg1自增后赋值给temp
    fun(&temp, &arg1, arg2); // 调用multi函数,传递temp和arg1的地址,并将结果存储在arg2中
    printf("%d\n", *arg2); // 输出arg2的值
}

int main() {
    int a;
    show(multi, 10, &a); // 调用show函数,传递multi函数指针、10和变量a的地址
    return 0;
}

代码运行流程和输出分析

  1. main() 中调用 show(multi, 10, &a)

    • 传递了 multi 函数的指针、整数 10 和变量 a 的地址。
  2. show() 函数的执行:

    • FUNC1 *p = &inc; 定义了一个指向 inc 函数的函数指针 p
    • int temp = p(arg1); 调用 inc 函数,传入 arg1(值为 10)。
      • inc(10)10 自增 1,返回 11,所以 temp = 11
    • fun(&temp, &arg1, arg2); 调用 multi 函数,传入 temparg1 的地址,以及 arg2 的地址。
      • multi 函数中执行 *c = *a * *b
      • *a*b 的值分别为 1110
      • 结果 *c = 11 * 10 = 110,所以 *arg2 被赋值为 110
    • printf("%d\n", *arg2); 输出 *arg2 的值,即 110

输出结果

110

总结

  • 代码的最终输出是 110,这是通过 multi 函数将 temparg1 的值相乘得到的结果,并存储在 arg2 中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值