求助关于指针的疑问
本帖最后由 guhusf 于 2021-3-2 21:10 编辑如图,1.为什么有两个q=pf,2.scanf时为啥是q++而printf时是*q++呢? guhusf 发表于 2021-3-2 20:52
现在有了
第一次for循环指针后移(为了给内存赋值)
所以打印时要指向首地址才能打印 因为p代表地址,*p代表地址里的值,scanf的参数为地址,printf的参数为值 没图呀{:10_249:} 巴巴鲁 发表于 2021-3-2 20:06
没图呀
现在有了{:5_91:} rororoya 发表于 2021-3-2 20:06
因为p代表地址,*p代表地址里的值,scanf的参数为地址,printf的参数为值
大佬,我把图加上了,再看看第一个问题呗 因为p++后,p指向的地址向后移了八次,第二个p = pf是将p重新指向pf ,输出的才会是你刚才输入的 没看到p,我只看到q my_angel 发表于 2021-3-2 21:02
没看到p,我只看到q
是q,打错了
scanf第二个参数是地址所以不用*直接写地址就行 rororoya 发表于 2021-3-2 21:00
因为p++后,p指向的地址向后移了八次,第二个p = pf是将p重新指向pf ,输出的才会是你刚才输入的
谢谢 你想一想,我们常规的写法是不是
var a;
scanf("%d",&a);
也就是第二个参数是放指针的,
所以第一个q=pf,没啥问题,因为pf申请了一块内存区域,然后p指向这块内存区域
继续第二个
q=pf
请问,pf的值前后有没有改变?没有吧?
是不是你可以这么理解,第二个 q=pf,算不算把q重新指向初始位置了?因为你前面一个循环里面q++了,是不是让指针偏移了,
所以第二个 q=pf就是让q重新指向最开始的地方,然后依次读取相关的内容。 4goodworld 发表于 2021-3-2 21:23
你想一想,我们常规的写法是不是
也就是第二个参数是放指针的,
好的,谢谢大佬
页:
[1]