区分指向数组元素的指针、指向数组的指针、指针数组
指向数组元素的指针
这类指针比较常见,例如
int a[3] = {1, 2, 3};
int *p;
p = a;//将数组的地址(也即数组首元素的地址)赋给指针p,相当于指针p指向数组的首元素
这样,我们就可以用*(p+0)
或*(p+1)
等等访问数组元素了。
同样的,这类指针也适用于二维数组,例如
int a[3][3] = {
{1, 2, 3},{4, 5, 6}, {7, 8, 9}};
int *p;
p = a;
这样我们可以通过*(p+0)
访问a[0][0]
,通过*(p+3)
访问a[1][0]
等等,就相当于把二维数组看作一维数组。当然也可以适用指向数组的指针来表示,见下节。
指向数组的指针
我们首先需要搞清楚二维数组的地址表示。
假设有二维数组int a[3][3] = {
{1, 2, 3},{4, 5, 6}, {7, 8, 9}};
,假设数组的起始地址为2000,则
a = 2000;
a[0] = 2000;
a[1] = 2012;
&a[0][0] = 2000;
&a[0][1] = 2004;
即数组名代表数组的首地址