關於函式宣告和呼叫時引數型別不一致的情況

2021-06-02 19:43:21 字數 373 閱讀 2588

請看下面這個例子:

#include int main(void)

void foo(double d)

會發現程式執行結果為0.000000

除錯執行會發現:

1.由於foo函式宣告為void foo(void)所以實參c根本沒有傳遞進去;

2.區域性變數d為隨機值,我的機器上是2.5463949521227207e-313,此數已超過double所表示的範圍所以列印出來0.000000

如果將宣告語句換成注釋掉的那句,會發現程式執行結果為60.000000

宣告和實現一致,引數能傳遞,雖然呼叫時傳進的是乙個char值,但執行時會強制型別轉換為double型別的。

c 中 函式作為引數 呼叫時型別問題

最近在學習c 發現了乙個問題,當乙個函式作為另乙個函式引數傳入時,引數型別很有意思 void a void b void m int main 說明形參為void m 時,實際上傳入的實參應為void 型別 函式指標 void 型別代表的是乙個返回值為void的函式,所以實參應傳入乙個函式的位址,而...

ARM函式呼叫時引數傳遞規則

之前在學習如何在c語言中嵌入彙編時有了解到c語言之前的引數呼叫是使用暫存器 r0傳遞第乙個引數,r1傳遞到第二個.一直到r3傳遞第四個引數.但是 實際上有時可能傳遞的引數非常多,超過8個,或是引數中有浮點數之類,引數也會超過4個暫存器,對於超出的部份並不使用r4,而是使用堆疊的方式.對於arm體系來...

C C 函式呼叫時的引數傳遞小結

眾所周知 void method object arg 和void method object arg 的區別,前者 在函式呼叫的時候,將實參進行了乙個複製,複製了乙個映象給了method函式,不管在method中如何改變arg的值,之前的實參一直都沒有變化,自始自終都固定不變。而後者 則是將實參本...