猿问

在C中将多维数组作为函数参数传递

在C中将多维数组作为函数参数传递

在C中,当我不知道数组的维数是什么时,我可以将多维数组作为单个参数传递给函数吗?

另外,我的多维数组可能包含除字符串以外的类型。


慕慕森
浏览 638回答 3
3回答

叮当猫咪

将显式指针传递给第一个元素,并将数组维度作为单独的参数。例如,要处理int的任意大小的2-d数组: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);同样的原则适用于高维数组: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);

心有法竹

您可以将您的函数声明为:f(int size, int data[][size]) {...}然后编译器将为您执行所有指针运算。请注意,尺寸大小必须出现在数组本身之前。GNU C允许参数声明转发(如果你真的需要在数组后传递维度):f(int size; int data[][size], int size) {...}第一个维度虽然也可以作为参数传递,但对于C编译器来说是无用的(即使对于sizeof运算符,当应用于数组传递时,因为参数将始终视为指向第一个元素的指针)。
随时随地看视频慕课网APP
我要回答