C 中傳值引數和引用引數怎樣區別?

2023-03-08 04:35:01 字數 4509 閱讀 4023

1樓:匿名使用者

舊事重提,看以下例子:

#include

using namespace std;

void swap(int a,int b)main()

main()

引用可以看作是乙個變數的別名,使用 引用 時 ,對於void swap(int a,int b) 編譯器並沒有給形參a,b分配新的記憶體空間,只是使 形參a,b指向了main函式中實參a,b的記憶體空間,他們共享同一內空間,即把位址給了形參。所以在void swap(int a,int b)函式中對這塊記憶體的改變也就改變了實參的值。

除了使用引用,也可以使用指標。

指標方式和引用方式都屬於傳址呼叫。

2樓:匿名使用者

從函式宣告中區別。

例如 void f1(int a)是傳值。void f2(int& a)是引用。

區別在於,如:

int x=3;

f1(x);/這個函式執行完了之後x還是3.因為只是傳值進去,而函式自己建立了乙個int a的區域性變數複製了x的值。函式只是改變了它體內的區域性變數a的值,對外部的x沒有影響。

f2(x);/執行完之後x變成了2.它是乙個別名。相當於直接操作x。它比較安全,不像指標一樣會存在記憶體洩露的隱患。

3樓:匿名使用者

傳值不會修改傳進來的物件的值。引用傳的是要引用物件的位址。傳值一半不會對該物件修改,生存期僅在函式體內。引用是呼叫位址,一旦被引用的物件數值發生改變其原始資料也會跟著改變。

c語言形參的值能不能傳遞給實參

4樓:跟著老王看新鮮

形參和實參擁有分別的儲存空間,即便是指標傳遞,改變的也只可能是這個指標變數所指向的內容,而不是指標變數本身的值,也即,如有指標變數p,那對實參的變化,有可能改變的也只是*p的值,而不是p本身的值。

實參和形參在英文中,argument和parameter經常可以互換使用,但是c99標準規定了:

對於actualargument或actualparameter使用術語argument(譯為實參);對於formalargument或formalparameter使用術語parameter(譯為形參)。

為遵循這一規定,我們可以說形參是變數,實參是函式呼叫提供的值,實參被賦給相應的形參。因此,在上述示例中,times是pound()的實參,n是pound()的形參。類似地,在函式呼叫pound(times+4)中,表示式times+4的值是該函式的實參。

5樓:夢心天永恆

要看情況,行參只是實參的乙個拷貝,形參改變了只是拷貝改變了,實參仍為原來的值,但是你如果用傳址呼叫的話,把形參定義為指標變數,實參呼叫位址的話,單你把指標所指的變數改變,實參所對應的值也改變了。

6樓:匿名使用者

不能,形參是實參的乙個副本,實參不是形參的乙個副本。

但是,有些時候,我們把形參做成了乙個指標型別,用來返回資料。因為,(指標型的)形參雖然是(指標型的)實參的乙個副本,但是指標指向的記憶體是相同的。如果在函式內修改了指標指向的記憶體的資料的話,(指標型的)實參採用原來的位址,一樣可以獲得修改後的記憶體資料的。

7樓:匿名使用者

看你是什麼形參。

1、直接用變數傳參一般是不能傳遞的。因為變數在傳遞中是兩個等值的不同變數,兩者互不影響。

2、如果是指標形參p,實參q,而且在被調函式中是對*p做的修改,那這時候這種修改可以傳遞。因為這時候是對p q指向的記憶體的直接修改,這種修改可以儲存,從而傳遞出來。

3、對陣列形參做的修改也可以傳遞。陣列名是乙個常指標。

8樓:匿名使用者

可以!不信你舉個例子,哥給你解釋。

c語言中實際引數和形式引數的設定及傳遞方式

9樓:天雲一號

c語言中實際引數(實參)與形式引數(形參)之間的傳遞方式有傳值和傳位址兩種函式呼叫方式。

下面通過舉例來說明實參和形參的設定方法以及傳值與傳位址的兩種函式呼叫方式。

值傳遞方式:

#include

void fun(int a, int b) /此處a, b為形參。

void mian()

#include

void fun(int *a, int *b)void mian()

10樓:匿名使用者

如果形式引數是變數級的,實參和形參的傳遞就是值傳遞,即實參的數值複製乙份傳給形參;

如果形式引數是表示位址含義的,如陣列、指標等,實參應該是陣列名或指標,傳遞時實參則把位址傳遞給形參,即形參和實參是對相同位址的資料進行的操作。

11樓:喧嘩街道

分為傳參呼叫和傳址呼叫。

c++中如何判斷乙個引數是傳入還是傳出?

12樓:小

一般來講,函式。

復return 回來制。

的東西是傳出,函式使用的時bai候du,實參就是傳入。zhi但是,您也知dao道,有引用,與指標的情況,實參傳入之後,如果在函式的改變了引用(或者指標物件)的值,那麼,也實現了對實參的改變,也實現傳出賦值的效果的。

13樓:

函式的形式引數可以是傳入的,也可以是傳入、傳出兼有的;函式的返回值肯定是傳出的。完畢。

14樓:匿名使用者

傳入的是在函式頭上面定義的,傳出的是return那個位置的。

15樓:匿名使用者

首先函式的引數肯定是傳入,至於傳出,看你是否要傳出了~

16樓:匿名使用者

scanf()裡面的都是輸入;

printf()裡面的都輸出。

c++引用的引用引數

17樓:東城尼瑪

1、傳遞可變引數。

傳統的c中,函式在呼叫時引數是通過值來傳遞的,這就是說函式的引數不具備返回值的能力。

所以在傳統的c中,如果需要函式的引數具有返回值的能力,往往是通過指標來實現的。比如,實現。

兩整數變數值交換的c程式如下: void swapint(int *a,int *b)使用引用機制後,以上程式的c++版本為: void swapint(int &a,int &b)呼叫該函式的c++方法為:

swapint(x,y); c++自動把x,y的位址作為引數傳遞給swapint函式。

2、給函式傳遞大型物件。

當大型物件被傳遞給函式時,使用引用引數可使引數傳遞效率得到提高,因為引用並不產生物件的。

副本,也就是引數傳遞時,物件無須複製。下面的例子定義了乙個有限整數集合的類: const maxcard=100;class set//建構函式friend setoperator *(set,set);/過載運算符號*,用於計算集合的交集用物件作為傳值引數//friendsetoperator*(set&,set&)過載運算符號*,用於計算集合的交集用物件的引用作為傳值引數。

}先考慮集合交集的實現 setoperator *(set set1,set set2)returnres;}由於過載運算子不能對指標單獨操作,我們必須把運算數宣告為 set 型別而不是 set *

每次使用*做交集運算時,整個集合都被複製,這樣效率很低。我們可以用引用來避免這種情況。 setoperator *(set& set1,set& set2)returnres;}

c語言函式呼叫時,引數是如何傳遞的

18樓:曉曉休閒故事

建立中間變數(形參),把實參值賦值給中間變數,當被調函式返回值時,系統釋放掉中間變數。

在程式中通過對函式的呼叫來執行函式體,其過程與其它語言的子程式呼叫相似。對無參函式呼叫時則無實際參數列。實際參數列中的引數可以是常數、變數或其它構造型別資料及表示式。

各實參之間用逗號分隔。

函式作為表示式中的一項出現在表示式中,以函式返回值參與表示式的運算。這種方式要求函式是有返回值的。例如:z=max(x,y)是乙個賦值表示式,把max的返回值賦予變數z。

19樓:羊舌桂蘭蠻煙

是將實參的值按一定順序賦給形參。

值的傳遞是單方面的。

形參值的改變並不影響實參。

c語言引數傳值

20樓:網友

1.實參是陣列元素,則形參一般是指標,指標指向實參陣列首位址,也就是將實參的位址傳遞給形參。形參位址儲存的值發生變化時,實參的值也將發生變化。

2.形參是指標,實參是函式,傳遞給形參指標變數的值是實參函式的位址。實參和形參的位址指向完全相同,即函式的記憶體首位址。

3.函式的形參和實參都是陣列,傳遞的是實參的值,而非實參位址,形參和實參是兩個完全獨立的陣列,只是將實參的值賦給了形參。

21樓:文件周瑜

你的問題很含糊,不知道你想問什麼。。。

「C 中,陣列只能通過值引數和引用引數兩種方式傳遞函式

傳參有三種方式 值引數 指標引數和引用引數 在把陣列作為引數傳遞給函式時,有值傳遞 by value 和位址傳遞 by reference 兩種方式。在值傳遞方式中,要在陣列引數的尾部加上一對方括號 呼叫函式時只需將陣列的位址 即陣列名 傳遞給函式。例如 如果陣列x被宣告為 int x 10 那麼函...

請問C 中引用和指標的區別,C 中引用和指標的區別

c 引用與指標的比較 引用是c 中的概念,初學者容易把引用和指標混淆一起。一下程式中,n是m的乙個引用 reference m是被引用物 referent int m int n m n相當於m的別名 綽號 對n的任何操作就是對m的操作。所以n既不是m的拷貝,也不是指向m的指標,其實n就是m它自己。...

C 中引用返回和標準返回的區別

舉個例子 int f int x int main 所謂引用傳遞就是不複製記憶體,把自己傳遞給對方,標準傳遞就是把自己的複製品傳遞給對方.程式首先定義變數a 這裡理解成佔用一塊4位元組大小的記憶體,把記憶體標識成a,然後在這塊記憶體裡存1個整數10 然後程式執行f a 注意到程式引數傳遞是引用形式的...