精通c语言的亲们,为什么地址交换了,而值却没改变呢

如题所述

你没有明白子函数的参数是怎么实现的
除了用&声明实参和形参公用一个内存空间外
其他的形式的函数,函数调用的时候是要另外申请内存空间的,也就是说是一个影子
他们不再一个内存空间中,那么函数改变了这个内存空间的内存,是不会改变主函数中变量占用的内存的内容的,真是很多新手在函数调用时遇到的困惑

用你的例子。我形象一下给你说明
假如啊
i占用内存地址为0001 j为0002
0001内容为3,0002内容为5

p占用内存地址为0003 q0004
0003内容为0001,0004内容为0002
这个你应该能明白,理解吧

那么调用函数的时候
a占用0005,b0006
0005内容为0001,0006内容为0002
这样应该理解吧
那么运行函数后,0005内容改为0002,0006内容改为0001
这样明白吧

接下来就是结果了,你改变了0005和0006的内容,但是打印的是0003和0004的内容
那么当然还是不变了,你说是不是啊

指针改变的道理是
void swap(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;

}
这里的解释就是
*a的内容是3,*b的内容是5
那么交换指针指向的内存的内容的话,3 5就交换了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-29
如果假设亲和女朋友旅游住酒店,但不能住一起,你住酒店的801房间;而她住802,这时酒店的管理人员发现房间编号有问题,于是把你和她的房间号码换了,就是原来的801改为802,而原来的802改为801,这时虽然号变了,但内容(你和她)缺没变。
对应到c当中,801和802就是所谓的指针,而内容就是你和她。
第2个回答  2012-08-29
修改下函数定义部分
void swap(int *&a, int *&b)

要改为引用.
具体请翻阅下<C++ Primer中文版>第四版 7.2.2
相似回答