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...