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