要点:
l 地址分为地址变量与地址常量。前者又叫指针,后者例如数组名。
l 地址两要素:数值、所指元素类型
l 两种形式的等价 a[i]等价于*( a+i)
*(p+i)等价于p[i]
l 数组名就是数组第一个元素的地址(注意:你要把任何维的数组都按一维数组来理解)
l 数组与指针的等价关系
l 多维数组可以理解为一维数组
int a[3];
模式: 元素类型␣数组名[元素个数];
int a[2][3];
int (*p)[3] = &a[1];
int *q = a[1];
a[1]有双重性:
第一,它代表第二行,所以它有地址。(在int (*p)[3] = &a[1]中,是将a[1]看作第二行。)
第二,它代表第二行第一个元素的地址。(在int *q=a[1]中,是将a[1]看作第二行第一个元素的地址。)
地址是个常量,你不能说一个地址还有地址。
a[1]的类型是int [3]。
int (*p)[3] = &a[1]没有损失类型,但int *q=a[1]却从int [3]到了int *,也就是说decay了。