c++的程序题大家帮忙看下

来源:百度知道 编辑:UC知道 时间:2024/06/30 23:38:43
#include <iostream.h>
swap(int *x,int *y)
{
int *z;
z=x;
x=y;
y=z;
}
void main()
{
int a=3,b=4;
swap(&a,&b);
cout<<a<<endl<<b;
}
为什么输出好事3和4,不是通过地址改变了两个数的值了吗?

你改变的是指针的地址 而不是a b 的值
#include <iostream.h>
swap(int *x,int *y)
{
int *z;
z=x;
x=y;
y=z;
}
void main()
{
int a=3,b=4;
int *c=&a,*d=&b;
swap(c,d);
cout<<*c<<endl<<*d;
}
或者 swap这样写:
swap(int *x,int *y)
{
int z=0;
z=*x;
*x=*y;
*y=z;
}
或者swap这样写:
swap(int &x,int &y)
{
int z;
z=x;
x=y;
y=z;
} 直接调用 swap(a,b)

这是因为a,b的实际地址根本就没有改变,
经过swap之后,改变的只是栈中x,y的地址。
而调用之后,这个地址就释放了,
所以没有改变a,b的值。
可以通过以下两种方法实现交换:
swap(int *x,int *y)
{
int z;
z=*x;
*x=*y;
*y=*z;
}
或:
swap(int &x,int &y)
{
int z;
z=x;
x=y;
y=z;
}

swap这样写:
swap(int *x,int *y)
{
int z;
z=*x;
*x=*y;
*y=*z;
}

swap(int *x,int *y)
{
int z;
z=*x;
*x=*y;