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

指针的小问题

sunny孙 发布于 2012-03-04 17:41, 600 次点击
#include<iostream>
using namespace std;
void swap(int *x,int *y);
int main(){
    int x = 10;
    int y = 20;
    cout <<"Before swap, x ="<<x<<"y ="<<y<<endl;
    swap(&x,&y);
    cout <<"After swap, x ="<<x<<"y="<<y<<endl;
    return 0;

}
void swap(int *x,int *y){
    int *t = x;

    x=y;
    y = t;   
}

为什么没有实现交换数据的功能??
9 回复
#2
大剑2012-03-04 17:49
void swap(int *x,int *y){
    int t = *x;

    *x=*y;
    *y = t;   
}
#3
sunny孙2012-03-04 18:21
回复 2楼 大剑
如果我想通过交换他们的地址来实现数据交换,该怎么写呢?你这种是直接交换他们的值···
#4
wtujoxk2012-03-04 22:36
程序代码:
#include<iostream>
using namespace std;
void swap(int *x, int *y);
int main()
{
    int x = 10;
    int y = 20;

    cout <<"Before swap, x ="<<x<<"y ="<<y<<endl;
    swap(&x,&y);   //传递到swap的就是x、y的地址,这是按址传递
    cout <<"After swap, x ="<<x<<"y="<<y<<endl;

    return 0;
}
void swap(int *x, int *y)
{
    int t;

    t = *x;
    *x = *y;
    *y = t;   
}


//按引用传递

#include<iostream>
using namespace std;
void swap(int &x, int &y);
int main()
{
    int x = 10;
    int y = 20;

    cout <<"Before swap, x ="<<x<<"y ="<<y<<endl;
    swap(x,y);  
    cout <<"After swap, x ="<<x<<"y="<<y<<endl;

    return 0;
}
void swap(int &x, int &y)
{
    int t;

    t = x;
    x = y;
    y = t;   
}

#5
zbh1602012-03-05 08:44
我认为你这个SWAP函数的作用只是把指针指向的地址改了,X和Y的值本身没改。但你输出的还是按主函数里面的X和Y来输出,没用到指针。
#6
zbh1602012-03-05 08:48
#include<iostream>
using namespace std;
void swap(int *x,int *y);
int main(){
    int x = 10;
    int y = 20;
    cout <<"Before swap, x ="<<x<<"y ="<<y<<endl;
    swap(&x,&y);
   
    return 0;

}
void swap(int *x,int *y){
    int *t =x ;
   
    x=y;
    y=t;   
    cout <<"After swap, x ="<<*x<<"y="<<*y<<endl;
}
这样子就可以
#7
zbh1602012-03-05 08:53
指针的作用:*X->&X     *X->&Y  ^
                 变成了       ,但是你输出的是&X和&Y的值,没用到指针,所以结果不变。指针只能改变自己的指向,不能改变地址的值。
            *Y->&Y     *Y->&X

[ 本帖最后由 zbh160 于 2012-3-5 08:54 编辑 ]
#8
BianChengNan2012-03-05 11:43
答楼主。
楼主的意思我明白,我也想过类似的问题,现分享下我的理解。

关键在函数调用时参数的传递(就是实参形参之间的关系),楼主只要记住,传给函数的实参是一个副本,对副本的改变不会影响你原来传过来的值,对任何类型都一样,包括指针。
所以如果想通过交换地址的方式进行交换,需要传双指针。

不知道这么说楼主能明白我的意思吗?欢迎交流
#9
大剑2012-03-05 18:43
程序代码:
#include "stdafx.h"
#include<iostream>
using namespace std;
void swap(int ,int );
int main(){
    int x = 10;
    int y = 20;
    cout <<"Before swap, x ="<<x<<"y ="<<y<<endl;
    swap(x,y);//值传递
    cout <<"After swap, x ="<<x<<"y="<<y<<endl;
    return 0;

}
void swap(int a,int b)
{
    int t =a ;
   
    a=b;
    b=t;  
   
}
然后 如同八楼所说的 参数的改变不会影响用子程序所用到的量。所以输出不变。
#10
sunny孙2012-03-05 21:13
回复 8楼 BianChengNan
谢谢···双指针应该能实现,您最好把代码也写出来了,嘻嘻···
1