Ru1 发表于 2019-6-30 19:07:18

关于指针的问题

请问下各位大佬,这两个程序的区别在哪里,传值和传址总是不太清除,请大佬们解答,越详细越好,谢谢各位了!!!

newu 发表于 2019-6-30 19:42:58

先理清楚几点概念,
第一,可以把 “地址和地址所指向的内容” 比喻为 “钥匙和抽屉”,只有对应的钥匙才能开对应的抽屉。
加个*就是取出抽屉中的东西。那么钥匙是固定的,但抽屉可以存任何东西。
第二,函数调用时参数的传递是“复制”。

区别在于第一个程序虽然把指针变量q传进了函数,复制给了p,但是无奈他是复制进去的,在函数中改变他对原先的q并无影响;
而第二个程序虽然将q复制给了p,但是通过p间接的找到了原来的a,所以能够将其改变。

Ru1 发表于 2019-6-30 21:30:01

newu 发表于 2019-6-30 19:42
先理清楚几点概念,
第一,可以把 “地址和地址所指向的内容” 比喻为 “钥匙和抽屉”,只有对应的钥匙才 ...

第一个我理解了是复制的,所以并无影响。但是第二个程序我不太明白为什么能找到原来的a,并修改呢?

newu 发表于 2019-6-30 21:42:09

Ru1 发表于 2019-6-30 21:30
第一个我理解了是复制的,所以并无影响。但是第二个程序我不太明白为什么能找到原来的a,并修改呢?

因为:
q = &a; //把a的地址(a的钥匙)给了q
fun(q); //把q复制给了p(p也有了和a一样的钥匙)
*p = 22; //此时通过*p(加个*开锁)然后把22放进去

Ru1 发表于 2019-6-30 22:09:52

真的非常谢谢您的解答,十分生动形象,那第一个程序中p有了a的钥匙以后,是理解成把22放了进去,还是理解成换成了b的钥匙,然后把22放了进去呢?

风扫地 发表于 2019-7-2 16:25:02

newu 发表于 2019-6-30 19:42
先理清楚几点概念,
第一,可以把 “地址和地址所指向的内容” 比喻为 “钥匙和抽屉”,只有对应的钥匙才 ...

"钥匙和抽屉",生动形象的比喻,大赞,又学到一招。

我以前用 妹纸房间和妹纸房间地址号打比喻,遭到了妹纸的强烈反对。。

newu 发表于 2019-7-2 16:40:45

Ru1 发表于 2019-6-30 22:09
真的非常谢谢您的解答,十分生动形象,那第一个程序中p有了a的钥匙以后,是理解成把22放了进去,还是理解成 ...

我怎么才看到你的回复,记得一定要点回复我才能收到通知哦,
第一个程序是复制了钥匙,他的操作都是在复制的钥匙上进行的,并没有开锁,所以不会改掉原来的值。

newu 发表于 2019-7-2 16:42:30

风扫地 发表于 2019-7-2 16:25
"钥匙和抽屉",生动形象的比喻,大赞,又学到一招。

我以前用 妹纸房间和妹纸房间地址号打比喻,遭到了 ...

哈哈不是我的原创哈,这是传智扫地僧的发明。
页: [1]
查看完整版本: 关于指针的问题