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)
如果是三维数组必须确定第三位。 参考技术C 这个是C语言中多维数组的语法规定,详细介绍LZ可查看C语言的书。追问
数组 传地址 那么为什么map[][MAX] 可以找到地址 而map[MAX][] 找不到呢
追答系统是根据数据总个数和第二维的长度算出第一维的长度的。
以上是关于C语言:二维数组 形参传值写法的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )
C 语言二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一二 模型数据拷贝到 三 模型中 并 排序 )