C语言中函数调用,为什么交换了地址,可是所指的值还是不变那

C语言中函数调用,为什么交换了地址,可是所指的值还是不变那,第1张

#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语言中函数调用,为什么交换了地址,可是所指的值还是不变那、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9769395.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存