若创建一个数组:int arr[10] = 0;
用指针变量来储存数组首元素的地址:int* p = arr,这里arr是数组名,表示首元素地址。
若p = p + 1或者p++之后p本来指向数组首元素地址,就变成了指向第二个元素的地址,p + n即指向第n + 1个地址。
减法也是同理,还可以用指针的方式来相减,即指针减指针,第3个元素的地址减去第一个元素的地址就为2,以此类推。
语法规定,数组指针的比较可以向后越界比较,但是不能向前比较。
既然数组名代表首元素地址,为什么不能直接用数组名来加减呢
因为数组名代表首元素地址是数组名的性质,性质是不可改变的,不会因为加减就改变数组名是首元素地址的性质。
为什么传址调用就可以使用arr++了呢,因为函数接收到的不是数组,而是首元素的地址,这里的arr并不是数组名,而是一个存放了数组的首元素的指针变量,指针变量进行加减就是可以的了。