给定代码输出的说明

时间:2017-06-23 07:08:03

标签: c function output function-pointers

#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,我不明白怎么做?

2 个答案:

答案 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