guhusf 发表于 2021-3-2 19:40:27

求助关于指针的疑问

本帖最后由 guhusf 于 2021-3-2 21:10 编辑

如图,1.为什么有两个q=pf,2.scanf时为啥是q++而printf时是*q++呢?

巴巴鲁 发表于 2021-3-2 19:40:28

guhusf 发表于 2021-3-2 20:52
现在有了

第一次for循环指针后移(为了给内存赋值)
所以打印时要指向首地址才能打印

rororoya 发表于 2021-3-2 20:06:09

因为p代表地址,*p代表地址里的值,scanf的参数为地址,printf的参数为值

巴巴鲁 发表于 2021-3-2 20:06:15

没图呀{:10_249:}

guhusf 发表于 2021-3-2 20:52:08

巴巴鲁 发表于 2021-3-2 20:06
没图呀

现在有了{:5_91:}

guhusf 发表于 2021-3-2 20:52:38

rororoya 发表于 2021-3-2 20:06
因为p代表地址,*p代表地址里的值,scanf的参数为地址,printf的参数为值

大佬,我把图加上了,再看看第一个问题呗

rororoya 发表于 2021-3-2 21:00:16

因为p++后,p指向的地址向后移了八次,第二个p = pf是将p重新指向pf ,输出的才会是你刚才输入的

my_angel 发表于 2021-3-2 21:02:38

没看到p,我只看到q

guhusf 发表于 2021-3-2 21:10:08

my_angel 发表于 2021-3-2 21:02
没看到p,我只看到q

是q,打错了

Tianhenzhi 发表于 2021-3-2 21:15:38

scanf第二个参数是地址所以不用*直接写地址就行

guhusf 发表于 2021-3-2 21:18:57

rororoya 发表于 2021-3-2 21:00
因为p++后,p指向的地址向后移了八次,第二个p = pf是将p重新指向pf ,输出的才会是你刚才输入的

谢谢

4goodworld 发表于 2021-3-2 21:23:03

你想一想,我们常规的写法是不是
var a;
scanf("%d",&a);
也就是第二个参数是放指针的,
所以第一个q=pf,没啥问题,因为pf申请了一块内存区域,然后p指向这块内存区域

继续第二个
q=pf
请问,pf的值前后有没有改变?没有吧?
是不是你可以这么理解,第二个 q=pf,算不算把q重新指向初始位置了?因为你前面一个循环里面q++了,是不是让指针偏移了,
所以第二个 q=pf就是让q重新指向最开始的地方,然后依次读取相关的内容。

guhusf 发表于 2021-3-2 22:20:06

4goodworld 发表于 2021-3-2 21:23
你想一想,我们常规的写法是不是

也就是第二个参数是放指针的,


好的,谢谢大佬
页: [1]
查看完整版本: 求助关于指针的疑问