为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
慕慕森 2019-08-12 18:42:18
在C中将多维数组作为函数参数传递在C中,当我不知道数组的维数是什么时,我可以将多维数组作为单个参数传递给函数吗?另外,我的多维数组可能包含除字符串以外的类型。
查看完整描述

3 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

将显式指针传递给第一个元素,并将数组维度作为单独的参数。例如,要处理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);


查看完整回答
反对 回复 2019-08-12
?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以将您的函数声明为:

f(int size, int data[][size]) {...}

然后编译器将为您执行所有指针运算。

请注意,尺寸大小必须出现数组本身之前

GNU C允许参数声明转发(如果你真的需要在数组后传递维度):

f(int size; int data[][size], int size) {...}

第一个维度虽然也可以作为参数传递,但对于C编译器来说是无用的(即使对于sizeof运算符,当应用于数组传递时,因为参数将始终视为指向第一个元素的指针)。


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 637 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信