书上有段话,关于指针,求解
下面总结一下数组的数组名的问题。声明了一个数组TYPE array[n]
则数组名称array就有两重含义,第一,它代表整个数组,它的类型是type[n],
第二它是一个指针,该指针的类型是type *,该指针指向的类型是TYPE,
也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,
该指针自己战友单独的内存区,注意它和数组第0号单元占据的内存区是不同的
该指针的值是不能修改的,即类似于array++的表达式是错误的
问,为什么array++是错误的,我们不是经常这么用吗
[解决办法]
如果令 type *p = array;,那么p++就是正确的,但是array++就是错误的
[解决办法]
TYPE *p1
TYPE p2[n]
p1++ 对
p2++ 错
数组名是一种特殊的指针
[解决办法]
数组名是一个指针常量,不能对它进行自增、自减和赋值运算。
[解决办法]
那书里说array是个指针是错的,它最多就像个指针,但实质并非指针,CSDN有大牛论证过.
另外,array是数组名,其数据是数组的地址,也是数组第一个元素的地址,你array++就相当于强行将数组的地址改变成第二个元素的地址,当然就不对了.所以数组名你可以理解为一个指针常量.一楼说"如果令 type *p = array;,那么p++就是正确的",是因为p是指针,它可以变更指向的位置(即改变它所存储的地址数据),所以p++是对的,而array++ 是错的.