#include <stdio.h>
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;
int temp = p(arg1);
fun(&temp, &arg1, arg2);
printf("%d\n", *arg2);
}
int main() {
int a;
show(multi, 10, &a);
return 0;
}
代码运行流程和输出分析
-
main()
中调用 show(multi, 10, &a)
。
- 传递了
multi
函数的指针、整数 10
和变量 a
的地址。
-
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
函数,传入 temp
和 arg1
的地址,以及 arg2
的地址。
- 在
multi
函数中执行 *c = *a * *b
。 *a
和 *b
的值分别为 11
和 10
。- 结果
*c = 11 * 10 = 110
,所以 *arg2
被赋值为 110
。
printf("%d\n", *arg2);
输出 *arg2
的值,即 110
。
输出结果
110
总结
- 代码的最终输出是
110
,这是通过 multi
函数将 temp
和 arg1
的值相乘得到的结果,并存储在 arg2
中。