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照例来说虽然
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/05 13:46:22
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 然后就改变了.