寫得內容是要用swap對調,但顯示出來,沒有對調呢?
我怎么看不懂了呢?
uj5u.com熱心網友回復:
書上讓你對比,沒有對調,這個是值傳遞,應該還有后續改為參考或指標傳遞,然后對比交換了,湊字數的書,uj5u.com熱心網友回復:
看書不仔細
uj5u.com熱心網友回復:
書上沒有講錯。接著往下看就明白了uj5u.com熱心網友回復:
書上的意思就是表達值傳遞給形參無法回傳改變的值必須使用指標、陣列等進行地址傳遞才能在被調函式中實作對原變數的改變
才能夠成功回傳
uj5u.com熱心網友回復:
書上沒有錯。書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
uj5u.com熱心網友回復:
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
uj5u.com熱心網友回復:
你錯了,你樓上對的,你會編譯錯誤
uj5u.com熱心網友回復:
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
你錯了,你樓上對的,你會編譯錯誤
uj5u.com熱心網友回復:

你的代碼和你的回答不一樣
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
uj5u.com熱心網友回復:
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
你錯了,你樓上對的,你會編譯錯誤
uj5u.com熱心網友回復:
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
你錯了,你樓上對的,你會編譯錯誤
有啥問題?? 參考傳遞,又不是指標傳遞.
uj5u.com熱心網友回復:
我是說你6樓的代碼是錯的。5樓是對的。你把指標直接賦給變數,不報錯才怪uj5u.com熱心網友回復:
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
我是說你這層樓的回答是錯的
uj5u.com熱心網友回復:
先進的參考傳遞,說實話,一直不大會用這。主要始終感覺有點難以理解。雖然學研了很久,也知道那玩意兒是個語法糖,老感覺沒吃透它,也因此基本上沒用過參考傳參。不大會用uj5u.com熱心網友回復:
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
你錯了,你樓上對的,你會編譯錯誤
你的swap1有BUG,編譯器都給你警告了,輸出也看出來的。你把指標地址賦給變數交換,相當于執行了空函式
uj5u.com熱心網友回復:
swap1本來就是錯誤的呀。最早我給出的是swap2的代碼,說我的是錯誤的,我還以為自己真的錯了,就測驗了下,用兩個比較了下結果。uj5u.com熱心網友回復:
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
你錯了,你樓上對的,你會編譯錯誤
有啥問題?? 參考傳遞,又不是指標傳遞.
不知道你用的是哪個編譯器,我的編譯器的定義函式是寫成swap(int &x, int &y)會報錯誤。
OS:ubuntu 編譯器gcc5.4.0 開發環境:eclipse platform
uj5u.com熱心網友回復:
書上沒有錯。
書上把錯誤的例子給出來了。
正確的是:
void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}
void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}
你錯了,你樓上對的,你會編譯錯誤
有啥問題?? 參考傳遞,又不是指標傳遞.
不知道你用的是哪個編譯器,我的編譯器的定義函式是寫成swap(int &x, int &y)會報錯誤。
OS:ubuntu 編譯器gcc5.4.0 開發環境:eclipse platform
我只是給你舉例子,你的寫法是錯誤的。隨便啥編譯器,你在6樓的回答是錯誤的,僅此而已.
uj5u.com熱心網友回復:
func(int& x); 這個是參考,func(a);func(int *p); 這個才是取地址func(&a); 你錯了,5樓是對的.
uj5u.com熱心網友回復:
還有,你用紅色標記那個,我是完全照著你6樓回答寫的。是swap里面寫錯了,而不是外面呼叫錯誤,介面是傳遞的參考,但是里面你把傳入的參考理解成了指標。 我感覺你把參考和指標弄混淆了。uj5u.com熱心網友回復:
還有,你用紅色標記那個,我是完全照著你6樓回答寫的。是swap里面寫錯了,而不是外面呼叫錯誤,介面是傳遞的參考,但是里面你把傳入的參考理解成了指標。 我感覺你把參考和指標弄混淆了。
第一次的代碼的確是有問題,在函式的頭部有錯誤,正確的應該是swap(int * x, int * y)而不是swap(int &x, int &y)
后來的帖圖中的代碼swap1其實是交換的是兩人變數的地址,而C函式形參與實參都是值傳遞,所以并不能交換main函式中兩個變數的值,swap2交換的時兩個指標所指向記憶體空間的值,而指標所指向的地址值是沒有改變的。
uj5u.com熱心網友回復:
書上寫錯了。你實際應該在swap函式里入參傳地址uj5u.com熱心網友回復:
感謝分享!!uj5u.com熱心網友回復:
謝謝大家。太感謝了。
uj5u.com熱心網友回復:
應該是沒有檢查,書上有誤轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100320.html
標籤:C++ 語言


