指针!又是指针!虚心求教!

ainbo1213 2009-05-22 07:39:29
代码1:
char p[] = "hello";
p++; //为什么错了?
p = p + 1; //为什么错了?

代码2:
char p[] = {'h','e','l','l','o',0};
p++; //为什么错了?
p = p + 1; //为什么错了?

代码3:
char *p = "hello";
p++; //这里可以。
p = p + 1; //这里可以。

数组名不是指向数组首元素的指针么?
为什么不能对其进行如上操作?
为什么第三段代码又可以呢?
虚心请教,谢谢^_^
...全文
39 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lingyin55 2009-05-22
3楼正解,一般只有当数组名作为函数的参数时,才会退化为指针,
这时数组名可以类似于指针进行运算。

[Quote=引用 3 楼 Wind_Runner 的回复:]
引用楼主 ainbo1213 的帖子:
代码1:
char p[] = "hello";
p++; //为什么错了? 数组名是常量,指向数组首元素的地址,不能更改p = p + 1; //为什么错了? 同理

代码2:
char p[] = {'h','e','l','l','o',0};
p++; //为什么错了?
p = p + 1; //为什么错了?

代码3:
char *p = "hello";
p++; //这里可以。 这里是指…
[/Quote]
回复
FFKyo 2009-05-22
数组名是const常量,不能修改,而指针是可以再次改变他的指向的(即可以让指针指向另一个地址)。
回复
dalianzsl 2009-05-22
前两段代码中的p代表数组的首地址,是常量,所以不可以用++运算。而后一个p是指向数组首地址的指针,是变量,因此可以进行++运算。
回复
Wind_Runner 2009-05-22
[Quote=引用楼主 ainbo1213 的帖子:]
代码1:
char p[] = "hello";
p++; //为什么错了? 数组名是常量,指向数组首元素的地址,不能更改p = p + 1; //为什么错了? 同理

代码2:
char p[] = {'h','e','l','l','o',0};
p++; //为什么错了?
p = p + 1; //为什么错了?

代码3:
char *p = "hello";
p++; //这里可以。 这里是指针,指向“hello"的存放地址,但它自身是变量,因此可修改
p = p + 1; //这里可以。

数组名不是指向数组首元素的指针么?
为什么不能对其…
[/Quote]
回复
老邓 2009-05-22
数组名不是指向数组首元素的指针么?

----
不是什么情况都一样的。
回复
Proteas 2009-05-22
有意思,把我看糊涂了...
回复
相关推荐
发帖
新手乐园
创建于2007-09-28

3.3w+

社区成员

C/C++ 新手乐园
申请成为版主
帖子事件
创建了帖子
2009-05-22 07:39
社区公告
暂无公告