在 c++ 中,函式引數的傳遞有兩種方式:傳值和傳引用。在函式的形參不是引用的情況下,引數傳遞方式是傳值的。傳引用的方式要求函式的形參是引用。
「傳值」是指,函式的形參是實參的乙個拷貝,在函式執行的過程中,形參的改變不會影響實參。例如下面的程式:
#include
using namespace std;
void swap(int a, int b)
int main()
在上面的程式中,swap 函式的返回值型別是 void,因此函式體內可以不寫 return 語句。 在不寫 return 語句的情況下,函式執行到末尾的}
才返回。
上面程式的輸出結果是:
in swap: a = 5 b = 4
after swaping: a = 4 b = 5
輸出結果說明,在 swap 函式內部,形參 a、b 的值確實發生了互換,但是在 main 函式中, a、b 還是維持原來的值。也就是說,形參的改變不會影響實參。這是因為,形參和實參存放在不同的記憶體空間中。
乙個程式在執行時,其所占用的記憶體空間有一部分被稱作「棧」,當乙個函式被呼叫時,在「棧」中就會分配出一塊新的儲存空間,用來存放形參和函式中定義的變數(也稱為區域性變數,如上面程式中的 tmp)。實參的值會被複製到棧中存放對應形參的地方,因此形參的值才等於實參。函式執行過程中對形參的修改,相當於只是修改了實參的乙個拷貝,因此不會影響實參。
#include
using namespace std;
void swap(int & a, int &b)
int main()
第 11 行,進入 swap 函式後,a 引用了 n1,b 引用了 n2,a、b 值的改變會導致 n1、n2 值的改變。因此本行會使 n1 和 n2 的值交換
int n;const int & r = n;
常引用和普通引用的區別在於:不能通過常引用去修改其引用的內容。注意,不是常引用所引用的內容不能被修改,只是不能通過常引用去修改而已,但可以用別的辦法修改。例如下面的程式片段:
int n = 100;const int & r =n;
//error: c++ requires a type specifier for
all declarations
r = 200; //編譯出錯,不能通過常引用修改其引用的內容
n = 300; //沒問題,n的值變為300
java引數傳值 傳引用
1 結論 2 傳值和傳引用區別 例項1 傳值 void method1 7 void method2 13 voidchange1 stringbuffer sb 17 voidchange2 stringbuffer sb 呼叫method1 螢幕列印結果為 helloworld 呼叫method...
傳值與傳引用
python的函式傳值和傳引用,和c c 語言是一樣的。在開始之前,我們有必要分清一下python的一些基礎概念。首先要說的是 變數 與 物件 在python中,型別屬於物件,變數是沒有型別的,這正是python的語言特性,也是吸引著很多pythoner的一點。所有的變數都可以理解是記憶體中乙個物件...
js 函式引數傳值 傳引用
基本數值型別 傳值 引用型別 嚴格來說不能算傳引用,在js中叫按共享傳遞 call by sharing也叫按物件傳遞 按物件共享傳遞。該策略的重點是 呼叫函式傳參時,函式接受物件實參引用的副本 既不是按值傳遞的物件副本,也不是按引用傳遞的隱式引用 它和按引用傳遞的不同在於 在共享傳遞中對函式形參的...