函数形参为二维数组
二维数组类型
二维数组可以看成是:一个一维数组,它的每个元素均为一维数组。
例如:int arr[3][4],可以看成是arr[3]内每个元素均为int型长度为4的数组。
二维数组作为形参
当定义为:int arr[3][4];时,数组名arr是指向长度为4的一维数组的指针,arr的类型是int (*)[4]。类型中包含了第二维的长度,使用时arr[i][j],则解引用成*(arr+i*4+j)。而当二维数组名作为实参传递给函数时,会自动退化成指针,因此,实际上对应的形参的类型应该为int (*)[4]。
例如:
void func(int (*arr)[4], int arrLen1, int arrLen2){ for(int i=0; i<arrLen1; i++) for(int j=0; j<arrLen2; j++) arr[i][j]=i*j; } int main(){ int arr[3][4]; func(arr, 3, 4); return 0; }
我们在传递一个二维数组时,有如下几种方式:
int arr[3][4]; // arrptr1为指向长度为4的int型数组的指针,(arrptr2 + 1) = arrptr2 + sizeof(int)*4 int (*arrptr1)[4] = arr; // 强制类型转化为(int **)类型,此时因为编译器不知道二维的长度,不能使用下标运算符"[]"来调用其中元素,(arrptr2 + 1) = arrptr2 + sizeof(int) int **arrptr2 = (int **)arr;
posted on 2015-11-26 15:03 Sunshine_Lin 阅读(966) 评论(0) 编辑 收藏 举报