C++中数组指针的理解

aWolfAlone 2007-11-23 04:03:50
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运算具有更高的效率”。某本书上如是说。
...全文
129 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
konglingqi1987 2007-11-24
  • 打赏
  • 举报
回复
好,这里烦了我好多天了!
加深了理解!

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧