关于指针的问题
请问下各位大佬,这两个程序的区别在哪里,传值和传址总是不太清除,请大佬们解答,越详细越好,谢谢各位了!!! 先理清楚几点概念,第一,可以把 “地址和地址所指向的内容” 比喻为 “钥匙和抽屉”,只有对应的钥匙才能开对应的抽屉。
加个*就是取出抽屉中的东西。那么钥匙是固定的,但抽屉可以存任何东西。
第二,函数调用时参数的传递是“复制”。
区别在于第一个程序虽然把指针变量q传进了函数,复制给了p,但是无奈他是复制进去的,在函数中改变他对原先的q并无影响;
而第二个程序虽然将q复制给了p,但是通过p间接的找到了原来的a,所以能够将其改变。 newu 发表于 2019-6-30 19:42
先理清楚几点概念,
第一,可以把 “地址和地址所指向的内容” 比喻为 “钥匙和抽屉”,只有对应的钥匙才 ...
第一个我理解了是复制的,所以并无影响。但是第二个程序我不太明白为什么能找到原来的a,并修改呢? Ru1 发表于 2019-6-30 21:30
第一个我理解了是复制的,所以并无影响。但是第二个程序我不太明白为什么能找到原来的a,并修改呢?
因为:
q = &a; //把a的地址(a的钥匙)给了q
fun(q); //把q复制给了p(p也有了和a一样的钥匙)
*p = 22; //此时通过*p(加个*开锁)然后把22放进去 真的非常谢谢您的解答,十分生动形象,那第一个程序中p有了a的钥匙以后,是理解成把22放了进去,还是理解成换成了b的钥匙,然后把22放了进去呢? newu 发表于 2019-6-30 19:42
先理清楚几点概念,
第一,可以把 “地址和地址所指向的内容” 比喻为 “钥匙和抽屉”,只有对应的钥匙才 ...
"钥匙和抽屉",生动形象的比喻,大赞,又学到一招。
我以前用 妹纸房间和妹纸房间地址号打比喻,遭到了妹纸的强烈反对。。 Ru1 发表于 2019-6-30 22:09
真的非常谢谢您的解答,十分生动形象,那第一个程序中p有了a的钥匙以后,是理解成把22放了进去,还是理解成 ...
我怎么才看到你的回复,记得一定要点回复我才能收到通知哦,
第一个程序是复制了钥匙,他的操作都是在复制的钥匙上进行的,并没有开锁,所以不会改掉原来的值。 风扫地 发表于 2019-7-2 16:25
"钥匙和抽屉",生动形象的比喻,大赞,又学到一招。
我以前用 妹纸房间和妹纸房间地址号打比喻,遭到了 ...
哈哈不是我的原创哈,这是传智扫地僧的发明。
页:
[1]