當前位置:首頁 » 參考文獻 » 傳引用函數

傳引用函數

發布時間: 2021-03-25 21:51:56

A. Java函數傳遞引用和值的區別

引用傳遞的是復對象的制地址,值傳遞的是變數的值
使用引用傳遞,被調用函數使用的是調用函數傳入的對象本身,也就是說在被調用函數中對對象進行修改將直接導致外部對象的值被修改。
而值傳遞,傳遞進去的是變數的副本(即拷貝),此時在被調用函數中對形參的任何修改都不會改變外部變數的值。
引用你可以直接理解成對象的別名。例如有有函數Test(String str);對象String name;
調用Test:Test(name);
則在Test裡面str其實是name外部變數的別名,他們所代表的是同一個對象,所以Test函數修改str即修改name

B. C++關於函數的傳值和傳地址傳引用的區別

#include<stdio.h>

voidplus(intp,int*q){

p++;
(*q)++;
}

main(){

inta=1;
intb=1;

plus(a,&b);//把a的值和b的地址傳給plus函數

printf("a=%d,b=%d ",a,b);//經過plus處理,得到結果,a不變,b變;
}

C. C++ 函數傳指針和傳引用的區別

指針抄是用來指向某個變數,而引用是給變數取個別名,其作用就如同typedef一樣。 用引用作形參時在調用函數里就像操作實參一樣,不需要考慮實參的地址問題 用指針做形參時,由於指針的值是變數的地址,所以要通過對地址解引用來操作其所指的變數。

D. 引用作為函數的參數有什麼優缺點

使用引用傳參的話來,在函數自中對該變數所做的修改,在函數返回後依然存在。這未必是程序員所希望的。

E. C語言到底支不支持引用傳遞做函數參數

「引用傳遞做函數參數」是C++的特性,C語言不支持。



//C語言要這樣寫:
voidExchg3(Rect*x,Rect*y){/*...*/}

//然後傳遞指針:
Exchg3(&a,&b);

F. 為什麼說向函數傳遞引用實現了形參和實參的數據雙向傳遞。

引用傳遞就是將實參地址傳遞給函數,函數接收到地址後並不另外在棧上專分配臨時內存空屬間儲存該地址,而是直接當做實參本身使用,如果實參含有有效數據,則函數可以通過引用直接取出(讀),也可以對其賦值(寫)。如果將實參傳遞給函數稱為正傳遞,那麼函數返回數據就是逆傳遞。

由於函數返回值是通過退棧方式傳遞,而且編譯器約定,一次返回只能為一個數據(值或者是對象/數組地址)。很多時候我們會遇到需要一個函數返回多個數據,一種方案是在堆上建一個結構,採用結構返回多個數據,還可以採用引用傳遞,函數除了通過return返回一個數據外,我們可以在函數參數中定義多個引用形參,外部代碼調用時將外部多個變數(實參)的地址按引用形式傳遞給函數(正傳遞),將數據傳遞給函數,函數處理完了後將結果賦值給被引用的變數而改寫實參(逆傳遞)。

G. C語言中函數參數傳遞問題:引用傳遞。

參數3中傳遞方式.
值傳遞,址傳遞,
引用傳遞.
後兩者
才是對傳入的參數的實際操作.
第一個是
操作的
傳入參數的拷貝副本.

H. 按引用傳遞傳的是什麼

C++中的函數有時候會採用按引用的參數傳遞和返回。比如:

int& f(int& a){
a++;
return a;
}
「按引用進行參數傳遞」很好理解:
通常使用的「按指傳遞」,函數內的操作的實際上是輸入參數的一個副本(即函數創建了一個臨時變數,其值與輸入參數完全相同),對該副本的操作不會影響輸入參數的值。
而「按引用傳遞」,可以理解為副本是一個引用變數,該副本與輸入參數共享存儲區。因此函數內對副本的修改相當於對輸入參數進行修改。
當輸入參數是抽象數據類型時,採用「按引用傳遞」可以避免創建副本時構造函數的調用(以及函數返回時析構函數的調用)。因此按引用傳遞會比按值傳遞更有效率。
而「按引用進行函數值返回」有點tricky:
「按指返回」實際上也是在函數中創建一個臨時變數,用於返回。
1)如果返回值類型是內部類型,那麼編譯器通常會在函數返回時將返回值放在register中,然後再從register中將其取出賦給相應的變數。
2) 如果返回值類型是抽象類型,register可能沒有足夠大的空間來存儲返回值的數據。那麼這時候編譯器在將輸入參數壓棧之後,調用函數之前,將返回值的地址壓棧。這樣在函數返回的時候直接將數據寫到返回值在棧中的位置處。
而「按引用返回」,對於返回值有一定的限制:即返回值不能是局部變數,必須能生存在函數作用域之外。
比如下面三種情況,第一種是錯誤的,後面兩種是正確的:
int& f(int& a){
int b = a;
b++;
return b;
}
int& f(int& a){
a++;
return a;
}
int& f(int& a){
static int b = 0;
return b;
}
也就是說,按引用傳遞的返回值的存儲區都是在函數之外,因此操作就簡單的多了,編譯器在函數調用期間一直對返回值的地址操作,在函數結束返回時,返回的實際上是返回值在函數外部的存儲區中的值。

I. 將「引用」作為函數參數有哪些特點

傳遞引用給函數與傳遞指針的效果是一樣的。這時,被調函數的形參就成為原來主調函數中的實參變數或對象的一個別名來使用,所以在被調函數中對形參變數的操作就是對其相應的目標 對象(在主調函數中)的操作。 ②使用引用傳遞函數的參數,在內存中並沒有產生實參的副本,它是直接對實參操作;而使用一般變數傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變數是實參變數的 副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比 用一般變數傳遞參數的效率和所佔空間都好。 ③使用指針作為函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重復使用」*指針變數名」的形式進行運算,這很容易產生錯誤且程序的閱 讀性較差;另一方面,在主調函數的調用點處,必須用變數的地址作為實參。而引用更容易使用,更清晰。

J. 函數調用是傳值還是傳引用

函數傳值,只是起到一個「傳」的作用,在調用函數中修改,只會在內調用函數的這個作用容域中起作用。

函數傳地址,一般通過傳指針或傳引用。它在調用函數的時候,如果改變了傳入地址中的數據,即地址所指向的地址空間。

而通過傳值,相當於在內存中拷貝了一份,在調用函數中,只改變了拷貝值所在的地址空間的數據,而不是改變所傳入值的地址空間的數據

a1和a2都是運行了,只是a2運行的並沒有改變傳入的值!

熱點內容
塗鴉論文 發布:2021-03-31 13:04:48 瀏覽:698
手機資料庫應用 發布:2021-03-31 13:04:28 瀏覽:353
版面217 發布:2021-03-31 13:04:18 瀏覽:587
知網不查的資源 發布:2021-03-31 13:03:43 瀏覽:713
基金贖回參考 發布:2021-03-31 13:02:08 瀏覽:489
懸疑故事範文 發布:2021-03-31 13:02:07 瀏覽:87
做簡單的自我介紹範文 發布:2021-03-31 13:01:48 瀏覽:537
戰略地圖參考 發布:2021-03-31 13:01:09 瀏覽:463
收支模板 發布:2021-03-31 13:00:43 瀏覽:17
電氣學術會議 發布:2021-03-31 13:00:32 瀏覽:731