C 函数与多维数组

书上讲到函数正确的定义方法:void sum_cols(int ar[][COLS], int rows)void sum_cols(int ar[][], int rows)则是不正确的,看了半天没明白,后来终于结合着看看懂了,编译器会把数组富豪转换为指针符号,如果是ar[1],则会变成ar+1,可是对于多维数组而言,下一个元素地址在何处不仅取决于类型,还取决于有多少个具体的元素,比如
oid sum_cols(int ar[][4], int rows),那么编译器就知道了,哦,int值4个字节,有4个int的元素,那么我跳到另一个就要走过16个字节,否则的话,就无法正确处理了。

于是诞生了变长数组……(形如:int sum2d(int rows, int cols, int ar[rows][cols]),并非是可以任意改变长度,而是你的函数不用写死了,通过传入前两个参数来决定指针的情况)
rows,cols与指针位置不可颠倒。

如果您觉得文章不错,可以通过赞助支持我

标签: 知识, 语法

添加新评论