void函数指针返回C中的值

时间:2014-06-25 15:50:48

标签: c function-pointers void

我正在玩C中的函数指针只是为了学习。我尝试调用void函数并将其结果设置为int。

void function(int x, int y){
printf("%d,%d\n",x,y);
}

int main(){
    int (*fptr)(int,int);
    fptr = function;
    int a = fptr(2,3);
    printf("%d\n",a);
    return 0;
}

我得到的输出是:

2,3 4

稍微玩了一下后,我意识到main是在function()中打印printf语句中的字符数。为什么会这样?这是预期的产出吗?

2 个答案:

答案 0 :(得分:6)

这是未定义的行为,因此,任何行为都是"在规范"中,包括"Nasal Demons"

但是,我们可以解释为什么在许多现代平台上发生可能

具有返回值的最后一个函数的返回值通常放在CPU的 AX 寄存器中。

printf是最后一个具有返回值的函数,并将4放入 AX 寄存器。
在此期间,没有其他任何东西覆盖 AX 寄存器,变量a获得"返回值" (即使fptr没有返回值!),通过获取 AX 寄存器的内容,该寄存器仍为4

答案 1 :(得分:0)

这是预期的结果! printf()函数将返回打印的字符数。在这种情况下,fptr(2,3)将打印2,3 AND \n,因此返回{{ 1}}