二维数组名作为参数传递使用时,形参要定义为数组指针的形式:
二位数组名就是数组指针类型
int func(int (*p)[n],int len1,int len2)
n一定要是一个常数值,即指明数组指针变量指向有几个元素的一维数组
一维数组名和二位数组名的比较
一维数组数组名类型是指针:
int arr1[10];
arr1-----int *
二维数组数组名类型是数组指针(而且必须指明一维数组元素个数):
int arr2[2][10];
arr2-----int (*)[2]
一维数组名本身就是第0个元素的首地址,指向的是首个元素
arr1+1,地址跳到下一个元素地址,
<一维数组名步长是元素步长>
二维数组名本身是一个数组指针,指向的是第一行的一维数组
arr2+1,指向下一行
<二位数组名步长是整行的步长>
二维数组作函数参数使用的两种方式:
int arr[][3]={1,2,3,4,5,6,7,8,9};
display1(arr[0],9);
display0(arr,3,3);
1,二维数组拆分为多个连续的一维数组(二维数组存储每一个元素本来就是连续存储),传递
传递这些连续内存的第一个地址
void display1(int* p,int len)
{
int i,j;
for(i=0;i<len;i++)
{
printf("%d\n",*p);
p+=1;
}
}
2,在理解了二维数组名的类型之后,直接传递二维数组名
void display0(int (*p)[3],int len1,int len2)
{
int i,j;
for(i=0;i<len1;i++)
{
for(j=0;j<len2;j++)
{
printf("%d\t",p[i][j]);
//printf("%d\t",*(*(p+i)+j))
}
printf("\n");
}
}