看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《larryho (新人偉)》之銘言: : 請問一下各位大大,在C程式裡面,我現在在主程式中(main)裡有 : 一個存放字元的二維陣列(假設這樣 A[2][2] ),如果我想要用函式 : 的方式去更改或整裡裡面的內容,例如使用氣泡排序法去排序,這 : 樣的話我應該如何使用call by reference的方式去做?(主要問題在 : 該傳什麼形式的指標給函式(*ptr? *ptr[]?),還有函式內的指標不知 : 如何控制二維陣列(++ptr or what?)) : 第二個問題,如果這樣做的話,以一個良好的程式設計習慣來說,到 : 底好還是不好?因為直接用函式直接更改資料,感覺上有點不是很好 : 可是萬一資料量太大,如果又再設一個空間給它放,又怕會爆掉~ : 感謝各位的解答,新手問題,請多多包涵~ 依你的問題寫個簡單範例給你參考 void sort(int *ptr,int size){ //*ptr=array[0] //*(ptr+1)=array[1] ptr++; //*ptr=array[1] //*(ptr+1)=array[2] } int main(){ const int size; array[size]; sort(&array[0],size); // 傳遞陣列的初始位址及陣列大小 system("pause"); return 0; } 或許你會分不清什麼是取值或取位址 指標所儲存的內容是位址而不是值 所以在指標前加上* 就是顯示這個指標指向的位址中的值 如果沒加上*就只是單純的顯示這個指標目前指向的位址 而在變數前加上&則是取位址的意思 不知道這樣解釋你會不會比較清楚一點 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.30.10.154
ledia:他問的是二維陣列呢。 09/28 17:24
tomore:二維陣列跟一維陣列還不是都一樣是連續的記憶體位置 09/28 17:30
ledia:那你的觀念真的要好好調整一下了 XD 09/28 18:19
tomore:小的不材 可以請ledia大指點一下哪裡有問題嗎 謝謝 09/28 19:15
snowlike:二維*(*(ary+i)+j)或許你認為是相同的*(*ary+k),但是 09/28 20:11
snowlike:因為資料型態不同,所以在參數列就沒辦法match 09/28 20:11
james732:資料型態不同 但是在記憶體裡的擺法好像是相同的? 09/28 20:21
ledia:C 裡面不直接傳二維陣列, 只會傳指向 const 大小陣列的指標 09/29 00:16
ledia:因為你可以用 malloc 做出二維陣列, 而編譯器不能因此就假定 09/29 00:16
ledia:所有二維陣列都是連續的 09/29 00:17