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
与指针位置不可颠倒。
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。