注册 登录
编程论坛 C++教室

问题贴,比较菜的

ymszzq 发布于 2010-08-29 09:02, 677 次点击
恩,有个问题,
#include<iostream>
using namespace std;
void swap(int ,int );
int main()
{
    int x=1,y=2;
    cout<<"在main函数前的x,y的值"<<x <<y<<endl;
    swap(x,y);
    cout<<"在main函数后的x,y的值"<<x <<y<<endl;
    return 0;
}
void swap(int x,int y)
{
        cout<<"在swap函数前的x,y的值"<<x <<y<<endl;
    int z;
    z=x;
    x=y;
    y=z;
    cout<<"在swap函数后的x,y的值"<<x <<y<<endl;
}

函数执行完了,怎么可以让函数内变的数,在函数外也使用
8 回复
#2
zhoufeng19882010-08-29 09:26
void swap( int x, int y)
改成
void swap( int &x, int &y)
就可以了。
#3
zxh_852010-08-29 10:52
或者用指针也可以
#4
ljt2010-08-30 09:16
楼主这个问题一定要搞清楚,传值和传址
#5
南国利剑2010-08-30 14:05
回复 楼主 ymszzq
这里有一个很值得注意的问题。
其实根本不用你自己写这个函数,因为这个函数在库函数里有。
看看我的这段简化的代码,就可以实现这个功能了。
程序代码:
#include<iostream>
using namespace std;

int main()
{
    int x=1,y=2;
    cout<<"在main函数前的x,y的值"<<x <<y<<endl;

    swap(x,y);

    cout<<"在main函数后的x,y的值"<<x <<y<<endl;
    return 0;
}



[ 本帖最后由 南国利剑 于 2010-8-30 14:06 编辑 ]
#6
ToBeOOP2010-08-31 10:19
按引用传递可以直接改变实参的值...而不是实参的副本...
#7
holychild2010-08-31 11:27
值传递是单向的,在函数里改变的只是实参的副本,而不会传递到main函数里面去。而指针传递和引用传递,传的是参数的地址,这样在main函数里的参数值也会随之改变。
#8
l3763653332010-09-12 16:39
#include<iostream>
using namespace std;
void swap(int *,int * );
int main()
{
    int x=1,y=2;
    cout<<"在main函数前的x,y的值"<<x <<y<<endl;
    swap(&x,&y);
    cout<<"在main函数后的x,y的值"<<x <<y<<endl;
    return 0;
}
void swap(int *x,int *y)
{
        cout<<"在swap函数前的x,y的值"<<*x <<*y<<endl;
    int z;
    z=*x;
    *x=*y;
    *y=z;
    cout<<"在swap函数后的x,y的值"<<*x <<*y<<endl;
}
#9
laoyang1032010-09-12 19:00
引用或者指针都可以
void sawp(int &x,int &y)     
{
     int z;
    z=x;
    x=y;
    y=z;

}
void swap(int *x,int *y)
{
        cout<<"在swap函数前的x,y的值"<<*x <<*y<<endl;
    int z;
    z=*x;
    *x=*y;
    *y=z;
    cout<<"在swap函数后的x,y的值"<<*x <<*y<<endl;
}
1