目的:理解a,a+1,a+2…,a[0]+1,a[1]+1,a[2]+1的含义以及指针类型
现在,定义一个二维数组:int a[3][2]={{1,1},{2.2},{3,3}};
这个二维数组由两个一维数组(作为二维数组的元素)组成(可以这么理解)
那么有:
1、a是指向第一个元素(一维数组)的指针,其类型int (*)[ ] 型,即a=&a[0],所以:a+i=&a[i] ;
如果通过二维数组名(指针)引用数组元素,则:a[i]=*(a+i);
//理解& 和 * 的作用
& :取变量的地址
* :取指针指向的值
2、a[0],a[1],a[3]是一维数组名(二维数组的元素),即指向一维数组(二维数组的元素)首地址的指针,如a[0]是一维数组a[0][0],a[0][1]的首地址,其指针基类型为int型,所以以下等价成立:
a[0]=&a[0][0]
a[0]+1=&a[0][1]
a[1]=&a[1][0]
a[1]+1=&a[1][1]
综上,a向后移动1个储存单元,相当于移动了一个一维数组所有元素的存储位置,如果a数组的首地址是1000,a+1的值就是2000+4×sizeof(int)
所以二维数组名作为指针,其含义是指向含有m个元素的一维数组的指针。