当把一个整型值加到一个指针上后,该指针指向的位置就向前移动了一段距离。就纯粹的内存地址而言,这段距离对应的字节数等于该值和该指针所指向的对象的大小的乘积;但是,就C指针真正的工作机理而言,这段距离对应的元素数等于该整型值。
在例7.7末尾,当程序将8和&array[0]相加后,所得的指针并不是指向&array[0]后的第8个字节,而是第8个元素。
仍以本章开头介绍的街道地址的比喻为例,假设你住在沃克大街744号,在你这一侧用连续的偶数作为街道地址,每家之间的地址间距是2。如果有人想知道你家往前第3家的地址,他就会先将2和3相乘,然后将6和你家的地址相加,得到他想要的地址750号。同理,你家往回第1家的地址是774+(-1)*2,即742号。
街道地址的算术运算只有在一个特定的街区中进行才有意义,同样,指针的算术运算也只有在一个特定的数组中进行才有意义。仍以上一段所介绍的背景为例,如果你想知道你家往回第400家的地址,你将得到沃克大街-56号,但这是一个毫无意义的地址。如果你的程序中使用了一个毫无意义的地址,你的程序很可能会被彻底破坏。