1. 程式人生 > >## 關於C/C++中函式形參傳遞問題

## 關於C/C++中函式形參傳遞問題

關於C/C++中函式形參傳遞問題

關於C/C++中函式形參的傳遞,我們可能已經知道,形參是從右往左傳遞形參入棧的。 而在今天的小白在程式設計實驗中遇到了一個問題,無論是從左往右還是從右往左,傳入的結果都相同。 下面是圖示說明: 在這裡插入圖片描述在這裡插入圖片描述這是一個將二進位制數轉換為十進位制數的遞迴函式:具有四個形式引數: i(2的指數位),num(待轉換的二進位制數),p(待轉換的位數),sum(代表將轉換的十進位制數)。 比如傳入12,它將先12與10取餘,餘為2,再用2來乘上2的0次得到二進位制個位代表的十進位制值。 然後將i(2的指數位)加1後傳入,將12/10=1的值傳入,p(待轉換的位數)減1傳入,最後將個位數代表的十進位制值傳入。 而我發現無論是將 i 的值在左邊還是右邊 pow函式中必須減一,但是實際上第一次我傳入的i值是0,如果這樣的話豈不是變成了 2^(-1),即第一次計算為12%10=2; 2*2^(-1)=1;結果為1,這是不符合實際的。 但是結果卻如下圖所示: 在這裡插入圖片描述

因為函式傳遞時,先一次從右往左傳遞值完成後才會呼叫形參中呼叫的函式,也就是說,當我第一次執行pow(2,i-1)時,實際上是在執行完 ++i 的基礎上進行的! 所以可以得出結論:當函式形參傳遞時有呼叫函式情形,會先依次從右往左執行完形參的傳遞,再呼叫函式。