永发信息网

str[1] = *(p + 1)

答案:2  悬赏:30  手机版
解决时间 2021-03-09 13:09
  • 提问者网友:且恨且铭记
  • 2021-03-08 13:52
str[1] = *(p + 1)
最佳答案
  • 五星知识达人网友:怙棘
  • 2021-03-08 15:24
分析:
初始值
str[0]="Welcome"
str[1]="to"
str[2]="Fortemedia"
str[3]="Nanjing"
*p="to"
那么p=&str[1],p++之后自然就是&str[2],是完全相等的两个值,两个指针值相等,意味着指向同一地址空间,那么改变str[2]和改变*p是完全等效的。

加一句,你就发现p++之后,p指针和&str[2]是一样的,对str[2]内容的操作,就等同于对*p的操作了。
printf(" p=%d\nstr[2]=%d\n",p,&str[2]);
str[2]=p[1] + 3; //在这里写str[2]=p[1]+3;和写*p=p[1]+3是一样的。追问经验证解释符合逻辑。但还有一疑问:str[i]怎么会等价于*(p +i)的?*p都还没有初始化呢!追答p一开始就初始化了:char **p = str +1
在这里定义p是一个指向字符指针的指针,并且初始化为str+1。从这里开始*p里面的内容就是str[1]里面的内容了。追问char *s = "abc";
char **p =&s;
printf("*p = %p,s = %p,&s = %p\n",*p,s,&s);
运行结果:*p = 0x804853e,s = 0x804853e,&s = 0xbfb6aaa8
*p确实等价于s。
虽然无法理解为什么会这样,但是非常感谢。追答嗯,很绕。
第一步定义之后,其实str是个常数(你可以试一下str=str+1编译不通过)。
str==&str[0],str+1==&str[1],str+2==&str[2],str+3==&str[3]
所以初始时p==&str[1],然后p++之后,p==&str[2]。
p和&str[2]是门牌号,同一门牌号就是同一间房了。
str[2]和*p是指房间里面的内容。
全部回答
  • 1楼网友:三千妖杀
  • 2021-03-08 15:50
是从 str[0], 开始, *p3++ 是先去内容,然后指针加一
求采纳为满意回答。追问请看清问题,谢谢。我对于str[0],str[1] = 。。。没有疑问。但是对于str[2],str[3]经*p赋值后为何*p的值会改变有疑问。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯