繁体   English   中英

C中的void函数指针返回值

[英]void function pointer return value in C

我在玩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语句中打印字符数。 为什么会这样呢? 这是预期的输出吗?

这是未定义的行为,因此,任何行为都是“规范”的,包括“鼻恶魔”

但是,我们可以解释为什么在许多现代平台上可能会发生这种情况。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM