-
若要通過傳遞函式來更改變數的值,必須傳遞位址。 您的程式正在傳遞變數 swap(a,b) 的值; 如果要更改變數的值,必須傳遞變數的位址,或者通過指標來傳遞,如果是陣列,可以直接使用陣列名稱,但如果是陣列的元素,則仍然需要使用位址。 就像樓上的那個改變他一樣。
你問的問題其實很簡單,我是很久沒學東西的初學者,多看書,這個問題很基礎。 如果你以後使用指標時不明白這一點,你就不會得救了!
-
可以使用指標將交換結果帶回主程式。
void swap
float t;
t= *x;
x = *y;
y = t; }
void main
swap( &a, &b);
-
這就是形式引數和實引數的問題,swap(a,b)看這句話,這句話呼叫上面的swap函式,x,y的值變成a,b,等價於x=a,y=b,x,y的值在函式中交換,所以y=a,x=b,但是函式只改變xyah a, b 沒有變化,所以最終輸出 ab 仍然是 70,40
如果向交換函式新增 cout << x<
-
因為int a、int b只是由引數位址操作,而引數位址和原來的變數位址不同,自然不涉及原來的變數(可以輸出函式swap a,b來試試,它們都已經交換過了),指標就是對原來的變數位址進行操作,也就是 直接對A和B進行主操作,因此可以互換。
-
如果呼叫了swap函式,則傳遞了變數的值,但不傳遞了變數的位址,並且無法更改變數的值。 要使 a=70 b=40,您可以使用 void swap(float &x, float &y) 或 void swap(float *x, float *y)。C++ 程式設計書中有詳細的解釋。
-
void swap 只傳遞變數的值,而不傳遞變數的位址,所以變數的值自然是不能改變的。
樓上是對的,如果你仔細看看C書,它都是基本的。
-
你好好看看譚浩強的C語言,介紹很清楚。
-
我在學習C語言的時候也想了很久,問了很多人後也沒聽懂!
最後,看多了,不加解釋就明白了!
-
請記住:函式都是值轉移。 引數是傳遞的原始變數值的副本。 但你必須弄清楚你傳遞的價值是什麼。
a、普通變數時間值通過,嗯,沒問題。 您無法更改原始變數的值。
b,如果是指標,則為位址的副本,其實是值傳遞(value pass of the address)。 你不能改變原來的變數(位址)的值,但你可以(不一定)改變位址指向的東西,即所謂的引數被改變了......
c,如果是引用,也是傳入的位址,但是這個位址已經解析過了,所以可以直接使用,不需要加*來解析(位址值是傳遞的,使用的時候已經解析過了)。 更改值與指標相同,但如果無法更改位址(引用實際上是解析的常量指標),則更明顯。
1.值已傳遞,無法修改原始值。 空間已分配。
2,你的意思是 char* p=0; char* &p2=p;它是什麼樣子的? 沒錯,你可以這樣做,那麼你用p2和用p是一樣的,表示式的意思是作為引數傳遞,你可以改變引數的值,也就是你可以改變引數指標的位址... 而且有時候函式需要傳遞乙個引數來改變位址,引數可以像這樣是char*&p2(也可以char**,但需要解析位址後使用)。
然後你可以改變函式中的位址,然後改變原來的指標(即指標(位址)的值)。 實際上,原理與我上面所說的相同。 但是重量很大*
-
它是乙個值傳遞,在呼叫函式時分配空間,並在呼叫後釋放空間。
-
對於值傳遞呼叫,將引數的值傳遞給引數,並為引數分配空間,並且對引數執行的任何操作都不會更改引數的值。
對於位址呼叫,意味著傳遞了引數的位址,沒有為引數分配新的空間(其實我個人認為引數是有空間來儲存引數位址的),這裡對引數的任何更改都會影響引數,使引數發生相應的變化。
-
首先,你上面的**有誤! int swap(int &a, int &b) 函式?
函式編譯不會通過(如果不返回值,可以使用void,修改見2)void swap(int &a, int &b)。其次,可以進行交換! 3.int &a,int &b,是乙個表單引數,說白了,就是用來做佔位符的,當你傳入引數(實數引數)的時候,一般來說,實數引數會被複製到表單引數中,但是你用了乙個引用,就沒有複製的問題,&相當於取位址,函式交換引用, 也就是說,它相當於原來的 x 和 y 也相應地發生了變化!
4.執行螢幕截圖:
如果您不熟悉 C++,請了解指標和引用。 關注一些科技部落格也不錯,最好從一開始就養成寫部落格的習慣,你會感謝我的! ☺
-
這是因為當呼叫 swap 函式時,引數 a 和 b 會獲取 x 和 y 值的副本。 從數值上講,a 等於 x,b 等於 y,但實際上記憶體中占用的位址不同,所以 swap(x,y); 這是它的樣子(編譯器不是這樣處理的,甚至有多種方法可以處理它,只是為了便於理解):
int a = x;
int b = y;
int t = a;
a = b;
b = t;
所以 x 和 y 不會互換。 如果要通過函式更改函式外部變數的值,例如此處的交換,則可以使用指標或引用。
參考比較簡單,就是將函式的引數列表改成這樣:
void swap(int &a, int &b) 不需要更改其餘部分。
如果使用指標,則需要在呼叫位置獲取變數的位址,並在函式中使用間接引用,這比引用更麻煩,效率更低。
-
#include
using namespace std;
int swap(int &a,int &b)int main(){
int x,y;
cin>>x>>y;
swap(x,y);
cout<
沒問題,x,y 將被交換。
但是你的理解不正確,x,y不是分配的問題。
int swap(int &a,int &b) 是使用引用的函式引數。
換句話說,a、b、x 和 y 不是賦值,但同一事物只是名稱不同。
相當於給 x 和 y 起乙個昵稱,本質上是一樣的。
-
3.int &a,int &b,是乙個表單引數,說白了,就是用來做佔位符的,當你傳入引數(實數引數)的時候,一般來說,實數引數會被複製到表單引數中,但是你用了乙個引用,就沒有複製的問題,&相當於取位址,函式交換引用, 也就是說,它相當於原來的 x 和 y 也相應地發生了變化!
-
以下是傳遞函式引數的兩種方法:
1.你開始學習的是值轉移,即引數複製引數的值,它們基本上是兩個不同的變數,但值是相同的,所以對引數的任何操作都不會影響引數。
2.陣列的名稱是陣列第乙個元素的位址,即指標傳遞,陣列的位址被傳遞,自定義函式獲取位址對陣列進行操作,會影響陣列。 (請注意,這裡沒有副本,而是對陣列本身的間接訪問)。
-
這是函式的引數。
f2{v1,v2) 為返回值,即值,以下相同。
中間的(v3、v4、v5)也是乙個。 接收引數應該是乙個結構體或類似的東西,您可以檢視函式所在的括號中的逗號數。