C++中数组指针的理解
C++中数组指针的理解
指向一维数组的指针
int x[5]; //x本身是一个指针常量,指向数组第一个元素
int *p=x;
实际p是指向数组x的第一个元素,
其中 p=x=&x[0] //这三个都是第一个元素的地址
数组的第2个元素表示为
x[1]
p[1]
*(p+1)
*(x+1)
*(++P) //特殊的表示
注:既然x和p都是指针(有一点不同),
那么有x[1],就可以有p[1],
有*(p+1),就可以有*(x+1)。
唯一不同的是:x是指针常量,所以x的值不可变化,也就不存在(++x)这种表示法了
无意发现这个:
int w=2;
w++ + w++=4
(w++)+(w++)=4
即使有括号,后增运算也是在整个表达式运算结束后才进行的。
指向二维数组的指针
int x[2][3]={{1,2,3},{4,5,6}};
int (*p)[3]=x;
可以这样理解二维数组x:它有两个元素,每个元素类型是一个有3个元素的一维数组。
那么p指向数组x的第一个元素,即一个有3个元素的一维数组。
因为第一个元素类型比较特殊,是数组类型,且长度是3,
所以在声明指针P时也指明了它所指向的元素的类型:数组,且是3个元素。
然后参照“指向一维数组的指针”就可以理解一下表示法了。
p[1] //指向数组第二个元素,即{4,5,6},其本质是个指针,其值是x[1][0]的地址
p[1][0]=4
也可以这样看
int *xp=p[1];
所以 xp[0]=p[1][0]
总结:
数组有的表示法,数组指针都可以用,他们一一对应。
但数组指针的自增自减表示法是独家秘方,不外传。
还有一点:“使用指针的增1或减1运算具有更高的效率”。某本书上如是说。