菜鸟请教指针移动的问题提

sallan 2010-05-26 04:04:56
char *p = "123456"; // 0x00417804
p = "789"; // 0x00417800
p = "abc"; // 0x0041780c

*p = "789"; // Error

p的地址为什么在变化啊,就因为所指向的内容发生变化就跟着变化吗?
*p为什么会报错,*p的内容不是“abc”吗?

很菜,请大家帮助,尤其是指针的变化情况。谢谢。
...全文
91 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dadun 2010-05-26
  • 打赏
  • 举报
回复
我也是个菜鸟,也不知道说得对不对,说错了帮忙更正一下.....

我感觉你的指针p就是一个地址,*p是取这个地址的值。

前面几个意思都是内存里有char型的字符,你的指针指向这些字符的首地址,因为字符存在不同的地址中,所以p在变。

最后一个Error,上面说*p是这个地址的值,也就是'7'这个字符。这时候这句话的意思就是'7'="789"....
z23576410 2010-05-26
  • 打赏
  • 举报
回复
看看反汇编你就明白啦:

char *p="123456";
00414E39 mov dword ptr [ebp-88h],offset string "123456" (41780Ch)
p="798";
00414E43 mov dword ptr [ebp-88h],offset string "7989" (417804h)
p="abc";
00414E4D mov dword ptr [ebp-88h],offset string "abc" (417878h)
另外,显然不能有下面语句,常量无法赋值
*p = "789"; // Error
就像是 "a"="789"
  • 打赏
  • 举报
回复

char *p = "123456"; // 0x00417804 p是一个指向常量字符串的指针
p = "789"; // 0x00417800 可以改变p
p = "abc"; // 0x0041780c

*p = "789"; // 此时的*p实际值为'a',是一个字符,p是一个指向常量字符串的指针
lylm 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 sallan 的回复:]
char *p = "123456"; // 0x00417804
p = "789"; // 0x00417800
p = "abc"; // 0x0041780c

*p = "789"; // Error

p的地址为什么在变化啊,就因为所指向的内容发生变化就跟着变化吗?
>>因为像"12345"之类的字符串常量都是保存在静态数据区,每个都是不同地址

*p为什么会报错,*p的内容不是“abc”吗?
>>*p是一个字符,不能赋值一个串

很菜,请大家帮助,尤其是指针的变化情况。谢谢。
[/Quote]
p的地址为什么在变化啊,就因为所指向的内容发生变化就跟着变化吗?
>>因为像"12345"之类的字符串常量都是保存在静态数据区,每个都是不同地址

*p为什么会报错,*p的内容不是“abc”吗?
>>*p是一个字符,不能赋值一个串
thehunters 2010-05-26
  • 打赏
  • 举报
回复
*p='7'
liboyanghui 2010-05-26
  • 打赏
  • 举报
回复
指针指向地址啊。你后面的“123456”,“789”,“abc" 都是常量。每个常量地址不一样啊。
给常量赋值肯定error啊!

你可以这样改。
char *p;
char a1[7] = "123456";
p = a1;
char a2[7] = "789";
p = a2;
liutengfeigo 2010-05-26
  • 打赏
  • 举报
回复
p的地址为什么在变化啊,就因为所指向的内容发生变化就跟着变化吗?
你不停的的让P里面储存的地址改变,这样P指向也不停的改变
pengzhixi 2010-05-26
  • 打赏
  • 举报
回复
指针也是一个变量就像 int a=10; a=5;a=4;只要你对这个变量赋值,那么这个变量的值就会变化。
liutengfeigo 2010-05-26
  • 打赏
  • 举报
回复
*p = "789";
这里你的P指向字符串字面常量了,不可以改变它的值的。
pengzhixi 2010-05-26
  • 打赏
  • 举报
回复
*p = "789"; //你将一个字符串字面量赋给一个字符能不错吗 *p得到的是一个字符
wdy0725 2010-05-26
  • 打赏
  • 举报
回复
对于你的例子来说,地址确实在变。 因为你给的都是常量,它们各有自己的地址。所以要变了。
如果这样:
char pa[] = "123456";
char *p = pa;

你再改变值,p就不会变了。

*p = "789" // 错误。 p只是个指针,没有指向分配的空间。

64,654

社区成员

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

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