1.对二维数组名求sizeof(arr) ,整个数组的大小
#include <stdio.h>
int main()
{
/*
二维数组名的理解:
二维数组中第一维中的数可以省略:int arr[][3]={1,2,3,4,5,6,7,8,9};
有两种特殊情况:sizeof(arr)和对数组名取地址
*/
int arr[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9}
};
//情况一.
int len = sizeof(arr);//对数组名求sizeof(arr)是计算整个数组的大小
printf("%d\n",len);//36
return 0;
}
2.二维数组名取地址,跨越整个数组的长度
对二维数组取地址,应该用二维数组指针去接收,int (*p)[3][3] =&arr;//二维数组指针
#include <stdio.h>
int main()
{
/*
有两种特殊情况:sizeof(arr)和对数组名取地址
*/
int arr[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9}
};
//情况2.二维数组名取地址
printf("%d\n",&arr); //地址是:1127668304
printf("%d\n",&arr+1); //地址是:1127668340 ,中间正好差了36,一个二维数组的长度
//二维数组的数组指针怎么定义:
int (*pARR)[3][3]=&arr; //如果要定义三维数组的数组指针依次类推
return 0;
}
二维数组名arr是指向第一维的数组指针
int (*p)[3]=arr; //p是指向第一维的 {1,2,3}
#include <stdio.h>
int main()
{
/*
二维数组名的理解:
有两种特殊情况:sizeof(arr)和对数组名取地址
*/
int arr[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9}
};
/*二维数组名的含义*/
int (*p)[3]=arr;//二维数组名是指向第一维的数组指针 -》{1,2,3}
for(int i = 0;i<3;i++)
{
for(int j = 0;j<3;j++)
{
printf("%d\n",*(*(p+i)+j) );//通过指针p访问每一个元素
}
}
return 0;
}
访问二维数组的方法尽量用中括号的方法arr[i][j]去访问,提高可读性,不然读你代码的人可能会骂你