[問題] 新手請教

看板C_and_CPP作者 (原來是宅男)時間10年前 (2013/12/22 14:32), 編輯推噓1(2110)
留言13則, 9人參與, 最新討論串4/4 (看更多)
小弟用C++ , compiler使用codeblocks 在寫selection sort的時候 遇到了一個奇怪的問題(跟selection sort無關) 一般而言傳參數的方式在C++中有pass by value, by address, by reference三種 在以下程式碼中我是直接用pass by value把要排序的陣列(b陣列)傳進去 照理說,在主程式的b陣列應該不會有任何改變阿 (學校老師教,要影響到外部的變數只有透過by address跟byreference) 但build and run之後,我的b陣列還是神奇地被排序好了 請問為何會這樣? 還有如果要改為pass by reference的話要怎麼改 感激不盡^_^ #include <iostream> using namespace std; void SelecteSort(int data[],int length) { int start=0; while(start!=length) { int j=0; for(int i=start;i<=length;i++) { if(data[i]<data[j]) j=i; } int temp=data[start]; data[start]=data[j]; data[j]=temp; start++; } } int main(int argc, char *argv[]) { int b[]={1,12,54,564,54,14,224,224,34,125,10,11,8,5,1115};//15個 SelecteSort(b,14); for (int i=0;i<15;i++) cout<<b[i]<<","; cout<<endl; return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.244.44.20

12/22 14:36, , 1F
因為 pass by address 跟 pass by value 沒什麼不同的
12/22 14:36, 1F

12/22 14:37, , 2F
這裡事實上是傳了 b 陣列開頭的位址進去而已
12/22 14:37, 2F

12/22 14:37, , 3F
其實那是 pass by value ( of the address )
12/22 14:37, 3F

12/22 14:48, , 4F
至底應該有說陣列當成參數會被弱化為指標(除了參考
12/22 14:48, 4F

12/22 14:49, , 5F
置  然後印象中板規有說不能用這種標題發文?
12/22 14:49, 5F

12/22 17:06, , 6F
嚴格來說在C++只有pass by value與reference
12/22 17:06, 6F

12/22 17:07, , 7F
by address是從by value區分出來的一個小類
12/22 17:07, 7F

12/22 17:08, , 8F
強調的是傳入參數是指標型別
12/22 17:08, 8F

12/22 20:53, , 9F
也沒錯 你的b的值(位址)沒改
12/22 20:53, 9F

12/23 00:43, , 10F
我是原PO~~~感謝各位的解答!!! 我懂了~
12/23 00:43, 10F

12/23 15:18, , 11F
你標題跟人家撞衫了 趕快自己改一下有辨識度的吧
12/23 15:18, 11F

12/23 19:46, , 12F
最近好多這種標題
12/23 19:46, 12F

12/24 17:17, , 13F
請修改標題
12/24 17:17, 13F
文章代碼(AID): #1IjeTZdP (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1IjeTZdP (C_and_CPP)