看板 C_and_CPP 關於我們 聯絡資訊
各位大大不好意思,小弟又來麻煩大家了,想問一個二維陣列的問題 void display()//如何傳入 { ...... } int main() { int x[2][3]={{1,2,3}, {4,5,6},}; display();//如何傳入 system("pause"); } 上面這個函式若是我想要將x[2][3]丟入display,但我的行跟列可能會變換, 這樣我應該要怎樣傳入函式呢?上面兩個如何傳入就是我的問題~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.214.36
stupid0319:display(int** x); 11/12 20:43
legnaleurc:二維陣列不能轉換為 ** 吧 11/12 21:06
wfgh:定義:xxx display(int [][3]) 11/12 21:24
wfgh:呼叫:display(x); 11/12 21:24
vm6jp6rmp4:那這樣不就寫死了,行只能傳入三 11/12 21:25
prismwu:簡單一點就是display(int *x,int r) 11/12 21:25
prismwu:把r傳入每排的數量(我猜你每排的數量會一樣) 11/12 21:26
james732:我會把二維 cast 成一維,像 display((int *)x, 2, 3)); 11/12 21:32
vm6jp6rmp4:那如果我要在display內顯示x所有值該怎寫呢 11/12 21:32
james732:http://nopaste.csie.org/ab528 我想這不是最好的寫法 11/12 21:36
james732:如果是C++的話就可以用template XD 11/12 21:39
vm6jp6rmp4:想請問一下james大,傳入為什麼要用(int*)x呢? 11/12 21:46
james732:你把 (int *) 拿掉的話應該會編譯錯誤 試試看 11/12 21:47
vm6jp6rmp4:我試過了,只是不知道為什麼要用(int*)x,想了解觀念! 11/12 21:48
james732:把整個二維陣列當作是一塊扁平的一維陣列 11/12 21:49
vm6jp6rmp4:那為什麼不能像一維陣列一樣丟x呢? 11/12 21:52
akasan:請想像一下一維陣列如何算記憶體位址 二維陣列又怎麼算的? 11/12 22:10
prismwu:因為他本來不是一維的(c認定上) 如果你一開始自己用1維存 11/12 22:11
prismwu:然後用x[i*wide+j]這樣去控制 就可以不用轉型 11/12 22:11
james732:http://nopaste.csie.org/f2871 像這樣也行 11/12 22:13
james732:把一維當作二維用 (需要動態的時候我會這麼寫) 11/12 22:16
wawi:一樓...請看置底文第12誡~~ 11/12 22:23
vm6jp6rmp4:那如果x變成三維的呢?是用(int**)x? 11/12 22:29
nowar100:我覺得我置底寫得很清楚啊,還是說我自我感覺太良好 XD 11/12 22:32
james732:會覺得三維使用(int **)的話,代表你還沒懂 XD 11/12 22:47
stupid0319:以前都沒發現,因為都是用LPARAM傳陣列 11/12 22:53
stupid0319:或者是LPVOID附帶資訊傳過法 11/12 22:54
stupid0319:想不到傳個陣列這麼複雜,又學到一課了 11/12 22:56
vm6jp6rmp4:使用(int*)是要將x轉成指標嗎? 11/12 23:00
wawi:三維也一樣...函式定義參數用指標去接 呼叫時傳入x[0][0] 11/12 23:02
stupid2:不管幾維不是都跟1維一樣不是嗎(話說原PO的問題我直覺是 * 11/13 00:13
loveme00835:C 語言沒有「傳陣列」這種事, 全部都是指標 11/13 13:17
VictorTom:把array用struct包起來然後傳struct instance算不算XD 11/13 15:39
purpose:算啊 11/13 15:43
stupid0319:把array用class包起來然後傳class instance也算不算 11/13 15:44
VictorTom:樓上的, 不算喔, C語言沒有class....(光速逃XD) 11/13 15:48
stupid0319:這麼說的話用union包起來也是可以的吧 11/13 15:50