指针交换问题

[复制链接]
 楼主| 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 | 显示全部楼层
我觉得应该这么理解:
  函数都应该看成是值传递,所以,只是值的简单拷贝,函数里面对拷贝的值的改变,并不会影响到外部。
而对于指针来说,因为拷贝的是地址,所以如果改变地址指向的内存的值,那么值也就改变了。但是,指针本身就是地址,实际上也是值,所以直接修改指针指向还是不会影响到外部的。引用是指针的变种,只不过意义不同,表示的是变量的别名,而不是地址。最终效果差不多
txcy 发表于 2013-6-30 17:41 | 显示全部楼层
指针用不好,很容易出错的
vivilzb1985 发表于 2013-7-18 23:42 | 显示全部楼层
hsbjb 发表于 2013-6-30 13:04
我觉得应该这么理解:
  函数都应该看成是值传递,所以,只是值的简单拷贝,函数里面对拷贝的值的改变,并 ...

楼上理解的蛮好的,指针这东西就是一把双刃剑的
shenmu2012 发表于 2013-7-22 17:38 | 显示全部楼层
hsbjb 发表于 2013-6-30 13:04
我觉得应该这么理解:
  函数都应该看成是值传递,所以,只是值的简单拷贝,函数里面对拷贝的值的改变,并 ...

楼上说的比较不错的,我学习啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

239

主题

2284

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部