作者gba356 (瑪利歐)
看板C_and_CPP
標題Re: [問題] 怎樣把二維陣列傳給另一個function
時間Sat Mar 14 20:43:04 2009
※ 引述《y2jj (.)》之銘言:
: #include <stdio.h>
: #include <stdlib.h>
: int x,y;
: void sub(int b[x][y]){
: …
: }
: void main(){
: printf("x:");scanf("%d",&x);
: printf("y:");scanf("%d",&y);
: int a[x][y];
: sub(a);
: }
: 錯誤訊息:variable-size type declared outside of any function
: 我想讓副程式sub知道陣列維度
: 不知道錯在哪邊
: 請各位前輩指點 謝謝~~~
最大的問題出在 void sub(int b[x][y]) 這行,
靜態陣列使用變數大小。
//事實上,main 函式中的 int a[x][y] 應該也是不合法的。
陣列的本質是指標,
最佳的解決辦法是傳入陣列指標及大小,再判斷邊界,
例如
void Sub( int *array, int row, int col )
搭配 array[i*row+col] 參考,
問題便解決了!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.161.121.214
推 ADF:這樣傳會有問題 03/14 20:45
→ gba356:噢,哪邊會有問題呢? 03/14 21:20
→ ADF:int** array_pointer 03/14 21:42
→ ADF:當使用array_pointer[i][j] compiler沒辦法知道i要跳多少位置 03/14 21:44
→ gba356:我懂你的意思了..那個部分是副程式宣告,在 main() 中 03/14 21:47
→ gba356:則是使用 int array[N][N]; 這樣宣告,那這樣會有問題嗎? 03/14 21:48
→ gba356:自問自答,會,我錯了XD 我修改一下.. 03/14 21:48
※ 編輯: gba356 來自: 218.161.121.214 (03/14 21:49)