函式swap int a,int b 為什麼只需要swap a,b 而不需要swap ab

2021-04-21 01:33:42 字數 3204 閱讀 2750

1樓:匿名使用者

這是bai因為c++ 傳遞的是引用,c++自動把a,b的地址du作為引數傳遞給swap函式zhi。

傳統的c中,函

dao數在呼叫

回時引數是通過值來傳遞答的,這就是說函式的引數不具備返回值的能力。

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

void swapint(int *a,int *b)使用引用機制後,以上程式的c++版本為:

void swapint(int &a,int &b)呼叫該函式的c++方法為:swapint(x,y); c++自動把x,y的地址作為引數傳遞給swapint函式。

2樓:匿名使用者

swap(int &a, int &b)中引數前面的&是引用的意思,不是取地址

所謂引用引數就是 將實參傳送給函式後,在函式中對形參的修改會體現在實參上

也就是說類似於指標,但比指標方便和安全

3樓:匿名使用者

swap(int &a, int &b)中的&僅表示傳值型別為引用型別,在呼叫函式時只需 用swap(a, b);專

若用swap(&a, &b),則&a、&b就 表示屬取a、b的地址,此時函式宣告原型就該是指標型別的引數了,即swap(int *a, int *b)

4樓:匿名使用者

引用型別, c++才有的,引用只是變數的別名

就是說傳引數時,提示編譯器不進行引數拷貝了,就把實參給傳進去了

所以傳變數本身即可,不應該傳地址

請問c++中 void swap(int &a,int &b) &是什麼意思?謝謝

5樓:匿名使用者

引數裡面的&表示引用型引數

一般的引數傳遞的時候,形參是實參的副本,也就是說,形參雖然和實參一樣,但是在記憶體中的位置不同

而引用型引數,在函式引數傳遞的時候,並不要複製引數,形參和實參在記憶體中是同一個位置,因此修改形參,實參也變化了

6樓:匿名使用者

& 這裡表示引用,說明需要傳遞變數給這個函式,函式中可以對引數的值進行修改

如果沒有 &,修改的就是函式體中的臨時變數

7樓:匿名使用者

&是地址符,整個函式定義是引數引用

8樓:匿名使用者

&表示引用,這還是比較初步的,引用就是同名變數,引用跟指標在很多方面都是相同的

9樓:茹果妳在

引用引數,會改變實參的值

c++;為什麼這裡用了swap函式而沒有發生交換?

10樓:不知詳解

其實這個問題主要取決於你的swap函式所修改的x,y是不是main函式中的a,b

執行結果告訴你不是.

那麼x,y是什麼呢 x,y代表的是函式棧當中的引數.

相信你聽說過函式呼叫的過程有壓棧這一說法吧。

其實x,y是儲存在棧當中的

函式呼叫的時候會為傳入引數在棧當中生成值相等的副本。

x,y代表的就是這個副本,而不是代表傳入引數。所以你修改x,y不能修改a,b。

如果想要修改a,b就必須知道a,b所在的記憶體地址.所以可以通過傳入地址解決問題.

void swap(int *x,int *y)

如果使用c++可以使用引用解決問題,引用大多數編譯器也是通過指標實現的.

void swap(int &x,int &y)

----------

很多人都說實參和形參是這個問題原因。

其實我說的是本質.形參和實參只是起概念上的作用罷了。並不能準確的理解這個問題.

11樓:匿名使用者

呼叫swap(a,b);可以理解成執行下面這一段**

可以看出,調換的只是x和y的值,a與b的值並沒有發生變化

12樓:

這是因為呼叫函式時進行的是 值傳遞

swap(a,b);實際上執行的是把a的值傳給x,把b的值傳給y,在函式內部把x,y的值交換了。但實際上a,b的值並沒有變。

要想改變a,b的值可以這樣:

#include"iostream.h"

void swap(int *x,int *y);

int main()

void swap(int *x,int *y)

13樓:

形參改變不影響實參,所以要取地址。**如下。

#include"iostream.h"

void swap(int &x,int &y);

int main()

void swap(int &x,int &y)也可以直接把輸出放在函式中

#include"iostream.h"

void swap(int x,int y);

int main()

void swap(int x,int y)

14樓:匿名使用者

理解形參和實參是解決這個問題的關鍵。。。

15樓:匿名使用者

樓上都已經說的很清楚了,建議 參考值傳遞,指標傳遞,引用傳遞,別名傳遞等不同傳遞方式加以區分;

(1)定義兩個函式,分別為void swap1(int a, int b)和void swap2(int *a, int *b),用於交換a,b的值。

16樓:光暗a告解

樓上的有錯誤 swap1函式沒有返回值,故主函式輸出的第一批中a,b的值並沒有交換。

#include

void swap1(int a, int b);

void swap2(int *a, int *b);

void main(int a,int b)void swap1(int a, int b)void swap2(int *a, int *b)

17樓:但丁耍大刀

#include

void swap1(int a, int b);

void swap2(int *a, int *b);

void main(int a,int b)void swap1(int a, int b)void swap2(int *a, int *b)

設函式yfx,xR1若函式yfx為偶函式

62616964757a686964616fe58685e5aeb9313333353461631 由圖象關於x a對稱得f 2a x f x 即f 2a x f x 因為f x 為偶函式,所以f x f x 從而f 2a x f x 所以f x 是以2a為週期的函式.2 若f x 為奇函式,則圖象...

怎樣證明正切函式是凹函式,如何證明一函式為擬凹函式

y tanx y sec x 1 cos x y 2 cos x sinx 2sinx cos x 2tanxsec x 只有當tanx 0時,才有y 0,它才是凹回函式。答 凹函式性質證明 50 f x 為凹函式時,f x 0 利用二階泰勒公式證明 這個就是琴生不等式 證明過程如下 如何證明一函式...

設函式f x log1 2 1 axx 1 為奇函式

f x log1 2 1 ax x 1 f x log1 2 1 ax x 1 log1 2 x 1 1 ax 1 ax x 1 x 1 1 ax 1 x 2 1 a 2x 2 a 2 1 a 1或 1 若a 1 則f x log1 2 1 x x 1 log1 2 1 無意義所以a 1 f x l...