C语言中函数调用,为什么交换了地址,可是所指的值还是不变那?求函数的运行结果#includevoid swap(int*a,int*b){int*t;t=a;a=b;b=t;}main(){int x=3,y=5,*p=&x,*q=&y;swap(p,q);printf("%d%d\n",*p,*q);结果是35照例来说虽然
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/29 22:09:21
![C语言中函数调用,为什么交换了地址,可是所指的值还是不变那?求函数的运行结果#includevoid swap(int*a,int*b){int*t;t=a;a=b;b=t;}main(){int x=3,y=5,*p=&x,*q=&y;swap(p,q);printf(](/uploads/image/z/5118091-43-1.jpg?t=C%E8%AF%AD%E8%A8%80%E4%B8%AD%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%2C%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BA%A4%E6%8D%A2%E4%BA%86%E5%9C%B0%E5%9D%80%2C%E5%8F%AF%E6%98%AF%E6%89%80%E6%8C%87%E7%9A%84%E5%80%BC%E8%BF%98%E6%98%AF%E4%B8%8D%E5%8F%98%E9%82%A3%3F%E6%B1%82%E5%87%BD%E6%95%B0%E7%9A%84%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C%23includevoid+swap%28int%2Aa%2Cint%2Ab%29%7Bint%2At%3Bt%3Da%3Ba%3Db%3Bb%3Dt%3B%7Dmain%28%29%7Bint+x%3D3%2Cy%3D5%2C%2Ap%3D%26x%2C%2Aq%3D%26y%3Bswap%28p%2Cq%29%3Bprintf%28%22%25d%25d%5Cn%22%2C%2Ap%2C%2Aq%29%3B%E7%BB%93%E6%9E%9C%E6%98%AF35%E7%85%A7%E4%BE%8B%E6%9D%A5%E8%AF%B4%E8%99%BD%E7%84%B6)
C语言中函数调用,为什么交换了地址,可是所指的值还是不变那?求函数的运行结果#includevoid swap(int*a,int*b){int*t;t=a;a=b;b=t;}main(){int x=3,y=5,*p=&x,*q=&y;swap(p,q);printf("%d%d\n",*p,*q);结果是35照例来说虽然
C语言中函数调用,为什么交换了地址,可是所指的值还是不变那?
求函数的运行结果
#include
void swap(int*a,int*b)
{int*t;
t=a;a=b;b=t;
}
main()
{int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf("%d%d\n",*p,*q);
结果是35
照例来说虽然被调用函数没有返回值,但是指针所指的地址不是发生了交换吗.那*p和*q所指值不是也应该发生变换吗,应该是53啊.各位不好意思我能悬赏的分不多.要考二级了
C语言中函数调用,为什么交换了地址,可是所指的值还是不变那?求函数的运行结果#includevoid swap(int*a,int*b){int*t;t=a;a=b;b=t;}main(){int x=3,y=5,*p=&x,*q=&y;swap(p,q);printf("%d%d\n",*p,*q);结果是35照例来说虽然
#include<stdio.h>
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;
int*t;
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 然后就改变了.