在C中將多維數(shù)組作為函數(shù)參數(shù)傳遞在C中,當我不知道數(shù)組的維數(shù)是什么時,我可以將多維數(shù)組作為單個參數(shù)傳遞給函數(shù)嗎?另外,我的多維數(shù)組可能包含除字符串以外的類型。
3 回答

叮當貓咪
TA貢獻1776條經(jīng)驗 獲得超12個贊
將顯式指針傳遞給第一個元素,并將數(shù)組維度作為單獨的參數(shù)。例如,要處理int的任意大小的2-d數(shù)組:
void func_2d(int *p, size_t M, size_t N){ size_t i, j; ... p[i*N+j] = ...;}
這將被稱為
...int arr1[10][20];int arr2[5][80];...func_2d(&arr1[0][0], 10, 20);func_2d(&arr2[0][0], 5, 80);
同樣的原則適用于高維數(shù)組:
func_3d(int *p, size_t X, size_t Y, size_t Z){ size_t i, j, k; ... p[i*Y*Z+j*Z+k] = ...; ...}...arr2[10][20][30];...func_3d(&arr[0][0][0], 10, 20, 30);

心有法竹
TA貢獻1866條經(jīng)驗 獲得超5個贊
您可以將您的函數(shù)聲明為:
f(int size, int data[][size]) {...}
然后編譯器將為您執(zhí)行所有指針運算。
請注意,尺寸大小必須出現(xiàn)在數(shù)組本身之前。
GNU C允許參數(shù)聲明轉(zhuǎn)發(fā)(如果你真的需要在數(shù)組后傳遞維度):
f(int size; int data[][size], int size) {...}
第一個維度雖然也可以作為參數(shù)傳遞,但對于C編譯器來說是無用的(即使對于sizeof運算符,當應(yīng)用于數(shù)組傳遞時,因為參數(shù)將始終視為指向第一個元素的指針)。
- 3 回答
- 0 關(guān)注
- 664 瀏覽
添加回答
舉報
0/150
提交
取消