打印

指针交换问题

[复制链接]
1200|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2013-6-30 12:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<iostream>
void  Swap( int *m, int *n )
{
  int *temp;
  temp = m;
  m = n;
  n = temp;
}

int main()
{
    int a = 5;
    int b = 10;
std::cout << a << " " << &a << std::endl;
std::cout << b << " " <<&b << std::endl;
    Swap( &a , &b );
std::cout << a << " " << &a << std::endl;
std::cout << b << " " << &b << std::endl;
    return 0;
}
这个为什么值不能交换,地址也不能交换?

相关帖子

沙发
txcy| | 2013-6-30 12:41 | 只看该作者
void  Swap( int *m, int *n )
{
  int temp;
  temp = *m;
  *m = *n;
  *n = temp;
}

使用特权

评论回复
板凳
无冕之王| | 2013-6-30 12:51 | 只看该作者
void  Swap( int *m, int *n )
{
  int *tempM = m;
  int *tempN = n;
  int *temp;
  temp = tempM;
  tempM = tempN;
  tempN = temp;
}

LZ的函数翻译过来就是上面这个东西,相当于啥都没干

如果函数声明改成这样就有变化了
typedef int * pInt;
void swap (pInt &m, pInt &n);
函数体不用改

使用特权

评论回复
地板
hsbjb| | 2013-6-30 13:04 | 只看该作者
我觉得应该这么理解:
  函数都应该看成是值传递,所以,只是值的简单拷贝,函数里面对拷贝的值的改变,并不会影响到外部。
而对于指针来说,因为拷贝的是地址,所以如果改变地址指向的内存的值,那么值也就改变了。但是,指针本身就是地址,实际上也是值,所以直接修改指针指向还是不会影响到外部的。引用是指针的变种,只不过意义不同,表示的是变量的别名,而不是地址。最终效果差不多

使用特权

评论回复
5
txcy| | 2013-6-30 17:41 | 只看该作者
指针用不好,很容易出错的

使用特权

评论回复
6
vivilzb1985| | 2013-7-18 23:42 | 只看该作者
hsbjb 发表于 2013-6-30 13:04
我觉得应该这么理解:
  函数都应该看成是值传递,所以,只是值的简单拷贝,函数里面对拷贝的值的改变,并 ...

楼上理解的蛮好的,指针这东西就是一把双刃剑的

使用特权

评论回复
7
shenmu2012| | 2013-7-22 17:38 | 只看该作者
hsbjb 发表于 2013-6-30 13:04
我觉得应该这么理解:
  函数都应该看成是值传递,所以,只是值的简单拷贝,函数里面对拷贝的值的改变,并 ...

楼上说的比较不错的,我学习啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝