#include <stdio.h>
int sum(int a, int b, int c) {
return a + b + c / 2;
}
void main() {
int (*function_pointer)(int, int, int); // how this will be interpreted
function_pointer = sum;
printf("%d", function_pointer(2, 3, 4));
return ;
}
当我运行ide时,它给出了输出7,我不明白怎么做?
答案 0 :(得分:1)
这样:
int (*function_pointer)(int, int, int);
表示您正在定义一个名为 function_pointer 的函数指针,该函数指针可用作 将3个整数作为参数的任何其他函数的别名 返回一个整数
然后当你这样做时:
function_pointer = sum;
您要将函数sum的地址分配给function_pointer,这意味着稍后您可以同时执行这两项操作:
function_pointer(2, 3, 4)
或
sum(2, 3, 4)
现在结果,为什么要打印 7
a + b + c / 2
2,3,4与 2 + 3 + 4/2 相同或 2 + 3 + 2 = 7
答案 1 :(得分:1)
声明
int (*function_pointer)(int, int, int);
声明一个指向函数的指针,该函数接受三个int
参数并返回int
。后者指向函数sum
并用于调用函数。
在sum
函数内部声明
return a + b + c / 2;
被解析为
return a + b + (c / 2); // division operator has higher precedence than + operator
// and therefore the operands `c` and `2` will be bind to `/` operator