一、二维数组
1、行优先:把每一行看作一个一维数组,而不是每一列
2、可以省略一维
3、[ ]:使用时表示下标,定义时表示长度
4、二维数组不是二级指针,一维数组是一级指针
5、数组名是数组首元素的地址,前提:必须有首元素(只适用于一维数组)
6、将多维数组看作一维数组,第一行就是首元素
(1)对于第一行:int(*p)[4]:指向数组的指针,即数组指针
(2)int *p[4]:保存指针的数组,即指针数组
(3)int (*arr)[4]:一级指针指向一个4列的一维数组的指针
7、只要是数组名作形参,sizeof(arr) = 4Bytes
(如果是64bits的平台,就是8Bytes)
二、代码
//void Show(int arr[10],int len);Show(int *arr,int len)
//void Show(int **arr,int row,int col)//error
//void Show(int arr[3][4],int row,int col)//ok
void Show(int (*arr)[4],int row,int col)
{
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
//数组作为形参,一定退化成指针,大小为4字节(如果是64位平台8字节)
//void Fun(int arr[10])//4
//void Fun(int arr[3][4])//4
void Fun(int arr[2][3][4])
{
printf("%d\n",sizeof(arr));
}
int main()
{
int a = 10;
int arr[10] = {1,2,3,4,5,6,7,8,9};
int brr[3][4];
int crr[3][4] = {{1,2,3,4},{5,6,7},{9,10}};
int drr[3][4] = {1,2,3,4,5,6,7,8,9};
int err[][4] = {1,2,3,4,5,6,7,8,9,10};//ok
//int frr[3][] = {1,2,3,4,5,6,7,8,9,10};//error
//打印err的值
Show(err,3,4);
//for(int i=0;i<3;i++)//
//{
// for(int j=0;j<4;j++)
// {
// printf("%d ",err[i][j]);
// }
// printf("\n");
//}
//Fun(err);
int hrr[2][3][4];
Fun(hrr);
return 0;
}