傳引用呼叫形參

2021-07-23 03:46:33 字數 2149 閱讀 6276

原創作品,轉賬請註明出處。

呼叫乙個函式是,它的實參會替換函式中的形參。也就是說實參會填充形參的位置。有幾種機制都可以實現這一過程:

一是傳值呼叫機制,二是用於替換形參的傳引用呼叫機制,下面主要針對傳應用呼叫機制進行簡單的闡述。

1. 區別:

傳值呼叫機制是將實參中的值傳遞給函式的形參,並不會將實參這個變數傳入;

傳引用呼叫機制是用實參變數本身來替換形參。函式呼叫中相應的實參必須是乙個變數,用於替換形參的將是這個變數。

void getinput(double& fvar)

在乙個包含這個函式的定義的程式中,以下函式呼叫會將a變數設定從鍵盤讀取值:

getinput(a);
2. 傳引用呼叫詳解:

大多數情況下可以將傳引用呼叫機制想象成:作為函式實參提供的變數名稱直接替換掉引用呼叫形參。實際過程中,要比這種簡單說法更加微妙。要是形參成為傳引用呼叫引數,需要在其型別名稱之後新增符號&。對應地,在函式呼叫中,你傳遞的實參應該是乙個變數,而不能是乙個常量或者表示式。呼叫函式時,實參變數(而不是該變數的值)會替換形參。呼叫函式期間,函式主體中對形參的任何改變,都會作用於實參變數。

程式變數是作為記憶體位址來實現的,編譯器為每個變數都分配乙個記憶體位置。

用以下函式宣告為例:

void getinput(int& inputnum1, int& inputnum2);
兩個傳引用呼叫形參inputnum1和inputnum2是函式呼叫中所用的實參佔位符。

getinput(firstnum, secondnum);
執行這個函式呼叫時,為函式提供的實際並不是實參名稱inputnum1和inputnum2,相反,為其提供的是與每個名稱關聯在一起的記憶體位置的列表。列如其位置列表是

1000

1014

這是已經分配給實參變數firstnum1和secondnum2的記憶體位置(注意順序)。與形參關聯的實際是這些記憶體位置。

firstnum1  ------> 1000 -------> inputnum1

secondnum2 ------> 1004 -------> inputnum2

執行函式主體的語句時,函式主體對形參執行的任何操作實際會作用於形參關聯的記憶體位置。

3. 形參與實參

(1)函式的形參在函式宣告中列出,並在函式定義主體中使用。任何形參都是一種空白位置或者佔位符,會在函式呼叫時候被別的東西填充。

(2)實參用於填充形參。學乙個函式呼叫時,實參在函式名之後的圓括號中列出。執行這個函式呼叫時,實參會在形參的位置「插入」。

(3)「傳值呼叫」和「傳引用呼叫」這兩個術語是指「插入」過程中具體採用的一種機制。

在傳值呼叫機制中,只使用實參的值在這種機制中,形參是乙個區域性變數,它被初始化稱想要實參的值。

在傳引用呼叫機制中,實參是乙個變數,而且會照搬整個變數。在這種機制中,是參變數會替換形參,故對形參所做的任何更改其實都會作用於實參變數。

非引用形參VS指標形參VS引用形參

一 非引用形參 voidadd1 intv1 這是最普通的形參方式,當函式被呼叫時,呼叫拷貝建構函式,生產乙個新的例項,函式所有的修改,都是對新的例項的修改 函式退出之前,會呼叫析構函式,資源。二 指標形參 voidadd2 int p 使用指標做為函式的形參,同樣指標的值 指標的位址 不會因為 p...

C C 傳值 傳址 傳引用與指標型形參

傳值 直接把實參拷貝乙份放入新開闢的記憶體,對拷貝後的數值進行相應的函式操作 傳址 把實參位址拷貝乙份放入新開闢的記憶體,通過拷貝的位址達到操作實參的目的 傳引用 沒有拷貝過程,直接對實參進行函式操作,引用只是對實參起了個綽號 實參的資料型別要和形參的資料型別保持一致 實參是位址時,形參時指標 實參...

python 函式傳參 傳參和傳引用

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...