a[3][4]
1.父数组包含三个子数组,每个子数组包含4个元素
2.父数组地址用a+i表示,子数组地址用a[i]来表示
3.数组名均可代表首地址
4.i行j列地址:*(a+i)+j==a[i]+i==&a[i][j]
5.父数组偏移1为1行的大小,子数组偏移1为一个元素的大小
案例:打印二维数组
源程序:
#include <stdio.h>
int main()
{
int arr[3][4]={{1,2,3,4},{4,5,6,7},{8,9,10,11}};
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
//printf("第%d行第%d列的值:%d,对应的地址:%p\n",i+1,j+1,arr[i][j],&arr[i][j]);
printf("第%d行第%d列的值:%d,对应的地址:%p\n",i+1,j+1,*(arr[i]+j),arr[i]+j);
//printf("第%d行第%d列的值:%d,对应的地址:%p\n",i+1,j+1,*(*(arr+i)+j),*(arr+i)+j);
}
}
return 0;
}
程序运行结果:
第1行第1列的值:1,对应的地址:000000000061FDE0
第1行第2列的值:2,对应的地址:000000000061FDE4
第1行第3列的值:3,对应的地址:000000000061FDE8
第1行第4列的值:4,对应的地址:000000000061FDEC
第2行第1列的值:4,对应的地址:000000000061FDF0
第2行第2列的值:5,对应的地址:000000000061FDF4
第2行第3列的值:6,对应的地址:000000000061FDF8
第2行第4列的值:7,对应的地址:000000000061FDFC
第3行第1列的值:8,对应的地址:000000000061FE00
第3行第2列的值:9,对应的地址:000000000061FE04
第3行第3列的值:10,对应的地址:000000000061FE08
第3行第4列的值:11,对应的地址:000000000061FE0C