C语言:二维数组 形参传值写法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言:二维数组 形参传值写法相关的知识,希望对你有一定的参考价值。

int findWay(int map[][MAX], int startingRow, int startingCol, int numRows, int numCols, int directions[])

为什么 写成map[MAX][MAX]或者map[][MAX]就可以 而写成map[MAX][] 或者map[][]就不行?

  编译器实际处理多维数组是把一维数组分段处理的,也就是说实际上并不存在多维数组,多维数组仅仅是个逻辑概念。
  例如下面这个:
  int fun(int a[2][3],int n);

  或者
  int fun(int a[][3],int n);
  要指出列数是多少,行数写不写都一样,行数要通过n进行传递。

  假设
  int b[2][3]=;
  则调用的时候可以写:
  fun(b,2);
参考技术A 编译器实际处理多维数组是把一维数组分段处理的,也就是说实际上并不存在多维数组,多维数组仅仅是个逻辑概念,所以行下标改变时,编译器必须知道有多少列,以计算偏移地址
如果是map[MAX][]的话,
假设目前坐标为map[i][x], 要移动到下一行相同列就是map[i+1][x],而参数没有提供列长度,编译器不知道这个+1到底要偏移多少个单位追问

那一维数组呢 比如 我在main 函数中已经知道map具体的长度 map[MAX]
那么 我在传值的时候 形参是 int findway(int map[]) 里面是这么写么?

追答

一维数组根据元素类型就可以判断要偏移的长度,所以当函数的形参可以不提供长度
比如有int a[100]; 那么a[i+2]相对于 a[i] 的偏移量就是2个int的长度,所以函数形参可以用不带长度的数组或者直接就是个指针:
f(int a[]); f(int * i)

本回答被提问者采纳
参考技术B map[MAX][MAX]或者map[][MAX]可以使因为,二维数据必须确定第二个维的数目,即必须是个确定值。
如果是三维数组必须确定第三位。
参考技术C 这个是C语言中多维数组的语法规定,详细介绍LZ可查看C语言的书。追问

数组 传地址 那么为什么map[][MAX] 可以找到地址 而map[MAX][] 找不到呢

追答

系统是根据数据总个数和第二维的长度算出第一维的长度的。

以上是关于C语言:二维数组 形参传值写法的主要内容,如果未能解决你的问题,请参考以下文章

C 语言数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )

c语言中怎么用二维数组作为函数参数

C语言二维数组问题

opencl核函数怎么传二维数组实参

C 语言二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一二 模型数据拷贝到 三 模型中 并 排序 )

C 语言二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )