函式的引數傳值

2021-07-03 20:22:09 字數 779 閱讀 3310

函式的引數傳值主要分為:傳值引數,傳引用引數。

1. 傳值引數

當初始化乙個費引用型別的變數時,初始值被拷貝給變數。此時,對變數的改動不會改變和影響初值。

int a = 1;

int b =  2;

swap(a,b)則不能交換他們的值。

但當時指標傳值時:

指標傳值的行為和非引用型別傳值一樣,當執行指標拷貝時,拷貝的是指標的值(在使用智慧型指標時因注意這點)。但拷貝之後,兩個指標是不同的指標,也就是指標裡面的類容相同但指標本身位址不同,只是指向了相同的位子而已(但在函式內給引數分配空間時,分配的空間位址是賦值給拷貝指標,而非傳遞指標,所以不能通過指標傳值給函式外的指標分配記憶體空間。只用傳遞指向指標的指標才能夠給函式外面的指標分配記憶體空間)。因而我們可以間接的訪問他所指的物件,以至於我們可以通過解引用來改變物件的值。

int  *c =  &a;

int  *d = &b;

swap(c,d)則能交換a,b的值。

2. 引用傳值

引用傳值和其他引用一樣,只是把引用引數繫結到初始化的物件上。如當把a,b的引用傳給swap(int &i, int &n)時,只是轉化為&i = a; & n = b;也就i 和n分別是a和b的別名,從而可以對a和b的初值進行修改。

由以上得:最好使用引用避免拷貝。

拷貝大的類型別物件或者容器物件比較低效,甚至有的類型別(包括io型別在內)根本就不支援拷貝操作,所以因該盡量避免直接拷貝讓它們,這時使用引用引數是比較明智的選擇。

函式引數的傳值和傳址

函式呼叫引數傳值和傳址的區別 傳值 把引數拷貝乙個副本,然後傳遞給函式體進行操作。但是對引數的操作不會影響到函式外的引數,範圍僅在當前的函式內有效。1 void compare int a,int b 兩個引數大小的比較 1 void copy int des,int sou 將引數sou拷貝到引數...

js 函式引數傳值 傳引用

基本數值型別 傳值 引用型別 嚴格來說不能算傳引用,在js中叫按共享傳遞 call by sharing也叫按物件傳遞 按物件共享傳遞。該策略的重點是 呼叫函式傳參時,函式接受物件實參引用的副本 既不是按值傳遞的物件副本,也不是按引用傳遞的隱式引用 它和按引用傳遞的不同在於 在共享傳遞中對函式形參的...

函式傳引數 python傳參是傳值還是傳引用

在此之前先來看看變數和物件的關係 python 中一切皆為物件,數字是物件,列表是物件,函式也是物件,任何東西都是物件。而變數是物件的乙個引用 又稱為名字或者標籤 物件的操作都是通過引用來完成的。例如,a 是乙個空列表物件,變數 a 是該物件的乙個引用 例1 輸出例2 輸出 id不一樣,所以說不是同...