
#include<stdioh>
void swap(int a,int b)
{
int t=0;
t=a;
a=b;
b=t;
}
int main()
{
int x=3,y=5;
int p=&x,q=&y;
swap(p,q);
printf("%d %d\n",p,q);
printf("%d %d\n,a,b); //看看是不是 a,b也改变了!~!
}
你那个错误,我的估计: 你可以用vc++单步调式一下也可以完全理解的
p=&x 就是把 x的地址保存在 指针 p中 p 就是得到 值 p=3
q也差不多
你下面 sqap(p,q) 就是把地址传过去了
可是传回来的值没有改变,为什么呢!
原因很简单
因为你的
int t;
intt;
t=a;a=b;b=t;
交换的是 a和b 的地址
不要忘记了,当调用一个函数时
os会为 swap 函数中的 int a,int b开辟内存
你改变的是swap开辟的内存并没有改变 main中的p和q内存区域
我再说清楚点
p 保存的是 &a q保存的是 &b
swap函数 a 保存的也是 &a b保存的也是&b
你用交换了 a和b的 地址有什么用没有改变原来的地方的地址
只是改变了你自己的 a 和 b里面的地址 没有改变那边的 真正的 3 和 5
如果用了
int t;
t=a;
a=b;
b=t;
就是间接去改变那边的值
通过里面 &a,&b,的地址来找到 真是的 3,5 然后就改变了
以上就是关于C语言中函数调用,为什么交换了地址,可是所指的值还是不变那全部的内容,包括:C语言中函数调用,为什么交换了地址,可是所指的值还是不变那、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)