→ PkmX: (int*) ptr這邊是錯的吧... 02/03 19:52
→ PkmX: 你把存放每個一維陣列指標的陣列的位置傳過去了... 02/03 19:53
→ bben900911: 那大概怎麼傳呢@@? 抱歉pointer就是在練習中QQ 02/03 19:57
→ bben900911: 能夠討教箇中原理嗎?(跪 02/03 20:08
→ wenyonba: 這不畫個圖,老實說用文字講起來還滿難講的 XD 02/03 20:12
→ bben900911: 我先說我的理解:我原本的作法 02/03 20:14
→ bben900911: 是把二維矩陣平面化成一維:p11 p12 p13 p21 p22 p23.. 02/03 20:16
→ bben900911: 所以我在函數內的處理上以為傳進的Pointer就可以進行 02/03 20:17
→ bben900911: 操作成數值(ex: p23=*(&p11+3*1+3) 02/03 20:18
→ bben900911: 但我是用pointer動態配置二維矩陣的 02/03 20:19
→ bben900911: 也就是函數看到的就真的只是一個一維矩陣,上面一堆P 02/03 20:20
→ bben900911: 一堆pointer,所以反而應該用雙重矩陣去解讀,再拆開 02/03 20:21
→ bben900911: 雙重指標* 02/03 20:21
推 EdisonX: *( a + i*column +j ) 一維陣列表示二維陣列,不同等動態 02/03 20:26
→ EdisonX: 二維取索引,最大的差別是可能不連續,碎片化。 02/03 20:26
→ EdisonX: 當然還有額外指標空間,沒畫圖真不好說 02/03 20:27
→ bben900911: 我後來的理解大致上是對的嗎? 還有 02/03 20:28
→ bben900911: 依照炸彈貓大修改後,傳入那邊 無論使用 02/03 20:29
→ bben900911: ptr、(int*)ptr、(int**)ptr、(int***)ptr都會是正解 02/03 20:30
→ bben900911: why? 02/03 20:30
→ wenyonba: 樓上大哥講出重點了,可以再想想 02/03 20:32
→ wenyonba: 如果找一個你身邊的人會的,畫個圖,你應該三秒就懂 XD 02/03 20:33
→ bben900911: 所以我推文的後來想法還是錯的嗎QQ 02/03 20:34
→ bben900911: 就:我把內涵一堆指標的一維矩陣丟進函數 02/03 20:35
→ bben900911: 對這東西作一維處理,不管怎樣都(ry 02/03 20:35
→ wenyonba: www.programmer-club.com.tw/ShowSameTitleN/c/45669.ht 02/03 20:38
→ wenyonba: ml 有點長,網址分兩段打 02/03 20:39
→ wenyonba: 回文裡有個圖,你看看也許有幫 02/03 20:39
→ wenyonba: 助 02/03 20:39
→ BombCat: 我覺得你的後來想法應該是對的 02/03 20:57
→ BombCat: ptr、(int*)ptr、(int**)ptr、(int***)ptr都會是正解是因 02/03 20:58
→ BombCat: 為C語言的type checking比較寬鬆,JAVA、Pascal就沒辦法 02/03 21:00
→ BombCat: 讓你這樣compile過 02/03 21:00
→ BombCat: 對c_array而言,a的tpye就是int **不管它的值怎麼取得的 02/03 21:07
→ bben900911: 也就是我不管在那一行怎麼cast,c_array都會用 02/03 21:10
→ bben900911: 雙重指標接所以OK。然而其他語言的compiler再檢查 02/03 21:11
→ bben900911: 雙邊type時比較嚴格,所以應該是只有(int **) ptr 過? 02/03 21:12
→ BombCat: 我覺得是這樣啦 :) 02/03 21:13
→ bben900911: 感謝樓上各位大大,感激不盡 02/03 21:14
→ PkmX: 題外話:炸彈貓那個*(*(a+i)+j)其實就是a[i][j] XD 02/03 21:17