[問題] 二維陣列傳遞

看板C_and_CPP (C/C++)作者 (woody)時間9年前 (2016/12/08 14:20), 9年前編輯推噓5(507)
留言12則, 8人參與, 最新討論串1/1
最近開始寫LeetCode 題目在這: https://leetcode.com/problems/island-perimeter/ 打算用C寫 我想要自己使用Dev-C來寫這題 因此會有個main()以及題目規定好的islandPerimeter() 假設我要在main裡面先建立好我的二維grid,再將此grid傳入islandPerimeter #include <stdio.h> #include <stdlib.h> int main() { int arr[4][4] = {{0,1,0,0},{1,1,1,0},{0,1,0,0},{1,1,0,0}}; islandPerimeter(arr,4,4); ............. } int islandPerimeter(int** grid, int gridRowSize, int gridColSize) { .......... } 這樣一定是錯的,置底就有說明了 因此我把main裡的grid宣告改成 int main() { int **arr=(int**)malloc(sizeof(int*)*4); int i; for(i=0;i<4;i++) arr[i] = (int*)malloc(sizeof(int)*4); arr[0][0]=0; arr[0][1]=1; arr[0][2]=0; arr[0][3]=0; arr[1][0]=1; arr[1][1]=1; arr[1][2]=1; arr[1][3]=0; arr[2][0]=0; arr[2][1]=1; arr[2][2]=0; arr[2][3]=0; arr[3][0]=1; arr[3][1]=1; arr[3][2]=0; arr[3][3]=0; islandPerimeter(arr,4,4); } 雖然這樣就可以傳入islandPerimeter(),但作法卻很笨 不知道有沒有辦法在不改變 int islandPerimeter(int **grid, int gridRowSize, int gridColSize) 的情況下 在main裡面宣告好grid呢 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.85.133.102 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1481178012.A.2D6.html ※ 編輯: woody3724 (219.85.133.102), 12/08/2016 14:34:01

12/08 14:32, , 1F
再加上 int *grid[4] = {array[0], ...}; 這樣如何?
12/08 14:32, 1F

12/08 15:03, , 2F
int **arr;這樣不能算二維陣列吧,犯規了
12/08 15:03, 2F

12/08 16:18, , 3F
Leetcode 還是用c++吧..沒container很辛苦
12/08 16:18, 3F

12/08 17:09, , 4F
乾脆把二維變成一維來實作,存取在算x, y位置
12/08 17:09, 4F

12/08 17:10, , 5F
或者確定長度的話 可以 int* arr[len]; 這樣子的二維
12/08 17:10, 5F

12/08 17:13, , 6F
不知道我有沒有理解對,不太清楚你的'笨'具體定義QuQ
12/08 17:13, 6F

12/08 21:06, , 7F
題目就是要吃 int**,就算用二維要 submit 時還是要改回來…
12/08 21:06, 7F

12/08 21:07, , 8F
不如用一樓的…
12/08 21:07, 8F

12/08 22:20, , 9F
用&arr. 這裡用pointer to pointer是因為這樣才能改到arr
12/08 22:20, 9F

12/08 22:20, , 10F
的值吧。
12/08 22:20, 10F

12/08 22:36, , 11F
用一維取代二維,習慣後會非常好用
12/08 22:36, 11F

12/13 14:14, , 12F
題目就是要吃int**沒錯,一樓的方法最好,謝謝囉!
12/13 14:14, 12F
文章代碼(AID): #1OIFkSBM (C_and_CPP)
文章代碼(AID): #1OIFkSBM (C_and_CPP)