[英]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.