簡體   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