首先,我们应该知道数组首元素的地址就是数组的名字。即:
int a[N];
那么a==&a[0];且两者都是常量。
地址按字节编制,如short类型占用两个字节,double类型占用八个字节。
在C中,指针加1指的是增加一个存储单元。对数组而言,这意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址。
以下代码表现了C的灵活性:
dates + 2 == &dates[2];
*(dates + 2) == dates[2];
以上关系表明了数组和指针的关系十分密切,可以使用指针标识数组的元素和获得元素的值。从本质上看,同一个对象有两种表示法。
也就是说,定义array[n]的意思是*(array + n)。可以认为*(array + n)的意思是“到内存的array位置,然后移动n个单元,检索存储在那里的值。”
顺带一提,间接运算符( * )的优先级高于+。