基础备忘:数组指针与对一维数组名取地址
一、指向一维数组的数组指针
数组指针是指向一个数组的指针。如
地址值是一样的,但是意义却不一样。
1)a是数组名,也是数组的首地址,相当于&a[0],类型是int*,即指向int的指针。是一个一维指针,每增加1移动一个int单位。如int *p=a; p++;p指向的是元素a[1];实验代码如下:
2)&a的类型是int*[10],类型是指向一个含有10个int元素的数组的一个指针。是一个二级指针,每增加1移动1个Int[10]单位。如*(&a+1)表示整个数组后的一个单位,即0后面的一个单位。*(*(&a+1)-1)就表示a[9]=0;实验代码和结果如下:
3)p是数组指针,指向一个含有10个int元素的数组的一个指针a。与&a一致。
二、指向多维数组的数组指针。
指针与指向的数组的维数没有关系,关键在于数组指针是一个二级指针,指向一个一维数组单位。数组指针移动一个单位,相当于移动了一整个一维数组。
为了能更好地理解数组指针,与普通指针及二级指针的区别,下面举例说明一下。
例如:
int a[3][3];
int (*p)[3]=a;
这里a是个二维数组的数组名,相当于一个二级指针常量;p是一个指针变量,它指向包含5个int元素的一维数组,此时p的增量以一维数组长度为单位;p+i是二维数组a的i行的起始地址,*(p+2)+2表示a数组2行2列元素地址(第一行为0行,第一列为0列),*(*(p+2)+2)表示a[2][2]的值。
实验代码如下: