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

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; //这里可以。

数组名不是指向数组首元素的指针么?
为什么不能对其进行如上操作?
为什么第三段代码又可以呢?
虚心请教,谢谢^_^
...全文
71 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
有意思,把我看糊涂了...

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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