1. 二维数组的定义及初始化
int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int brr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int crr [3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int drr[3][4]={1,2,3,4,5};
drr[2][1]=1; //把第一个格子置为1,其余为0
int err[3][4]={0,0,0,0,0,1};//初始化将其中一个格子置为1,其余为0
int frr[][4]={1,2,3,4,5,6,7,8,9,10};//遵循行优先原则
2. 调用函数,通过二维数组传参
如下所示:
void Show(int arr[][4])//行数可省略,列数不可省略
//or void Show(int (*arr[4])
{
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%-3d ",arr[i][j]);//"%-3d"左对齐 "%3d"右对齐
}
printf("\n");
}
}
int main()
{
int arr[3][4]={1,2,3,4,5,6};
Show(arr);
return 0;
}
3. 二维数组在内存中存储方式是,后一行直接跟在前一行的后面,地址挨着。
这个可以用代码运行进行验证,如2中的例子,分别输出arr[0][3]和arr[1][0]的地址
看二者的地址是否相同。
4. 看清数据类型
一维数组,如int arr[4]中:
arr——int *
arr+1——int *
arr[0]——int
二维数组,如int brr[3][4]中:
brr——int(*p)[4]
brr+1——int(*p)[4]
brr[0]——int * (二维数组中brr[0]相当于一个一维数组即arr)
brr[0]+1——int *
brr[0][0]——int
5. 数组指针和指针数组
int (*p)[4]
//指向数组的指针(数组指针)
int *p[4]
//一个含有4个格子的数组,数组里是整型指针。即保存指针的数组(指针数组)
其实,在个人理解时,可以在中间加个“的”字,如“数组的指针”,中心词是指针,意思就是它是一个指针,这个指针指向一个数组。又如“指针的数组”,中心词是数组,意思就是,它是一个数组,数组的每个格子保存的是指针。