| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 600 人关注过本帖
标题:指针的小问题
只看楼主 加入收藏
sunny孙
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-11-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
指针的小问题
#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;   
}

为什么没有实现交换数据的功能??
搜索更多相关主题的帖子: void 
2012-03-04 17:41
大剑
Rank: 2
等 级:论坛游民
帖 子:30
专家分:25
注 册:2011-11-16
收藏
得分:5 
void swap(int *x,int *y){
    int t = *x;

    *x=*y;
    *y = t;   
}
2012-03-04 17:49
sunny孙
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-11-4
收藏
得分:0 
回复 2楼 大剑
如果我想通过交换他们的地址来实现数据交换,该怎么写呢?你这种是直接交换他们的值···
2012-03-04 18:21
wtujoxk
Rank: 2
等 级:论坛游民
帖 子:17
专家分:72
注 册:2012-2-13
收藏
得分:0 
程序代码:
#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;   
}

2012-03-04 22:36
zbh160
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-9-2
收藏
得分:0 
我认为你这个SWAP函数的作用只是把指针指向的地址改了,X和Y的值本身没改。但你输出的还是按主函数里面的X和Y来输出,没用到指针。
2012-03-05 08:44
zbh160
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-9-2
收藏
得分:0 
#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;
}
这样子就可以
2012-03-05 08:48
zbh160
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-9-2
收藏
得分:0 
指针的作用:*X->&X     *X->&Y  ^
                 变成了       ,但是你输出的是&X和&Y的值,没用到指针,所以结果不变。指针只能改变自己的指向,不能改变地址的值。
            *Y->&Y     *Y->&X

[ 本帖最后由 zbh160 于 2012-3-5 08:54 编辑 ]
2012-03-05 08:53
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:5 
答楼主。
楼主的意思我明白,我也想过类似的问题,现分享下我的理解。

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

不知道这么说楼主能明白我的意思吗?欢迎交流

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-03-05 11:43
大剑
Rank: 2
等 级:论坛游民
帖 子:30
专家分:25
注 册:2011-11-16
收藏
得分:0 
程序代码:
#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;  
   
}
然后 如同八楼所说的 参数的改变不会影响用子程序所用到的量。所以输出不变。
2012-03-05 18:43
sunny孙
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-11-4
收藏
得分:0 
回复 8楼 BianChengNan
谢谢···双指针应该能实现,您最好把代码也写出来了,嘻嘻···
2012-03-05 21:13
快速回复:指针的小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019429 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved