一、二维数组元素的地址
我们假设数组a的首 地址为0x2000,那么在内存中的实际存 储方式是什么样的那?接下来我们就使用抽象表示 如图所示。
我们上面的第一种方式就是指针指向二维数组中的元素,此时指针的移动是以元素为单位进行的,这种指针属于指向“数组元素”的指针,有时称为“列指针”;
那么我们把指针p2指向二维数组的首元素之后会发生什么那,p2+1将指向数组的第2个元素,p2+2将指向数组的第3个元素,依次类推。
我们接下来看一下下面的语句段进行深入的了解:
int a[3][4];
int *p = &a[0][0];
定义了一个int型指针p指向二维数组a的首元素。
#include <stdio.h>
int main( )
{
int a[3][4]= {{1,2,3,4},{5,6,7,8},{9,10,11,12}},i,j,*p;
p=&a[0][0];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%5d",*p);
p++;
}
printf("\n");
}
return 0;
}
程序运行结果如下: 1 2 3 4 5 6 7 8 9 10 11 12
二维数组的引用除了上述的方式还有第二种方式:
第二种方式其实就是让指针指向了组成二维数组的一维数组,那么此时指针的指针的移动是什么的那。其实就是以一维数组为单位的,该指针属于指向“数组”的指针,称为“行指针”。