| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 833 人关注过本帖
标题:这个是引用的问题吗?不懂结果啊。。。
只看楼主 加入收藏
hey小阳阳
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-11-24
结帖率:37.5%
收藏
已结贴  问题点数:10 回复次数:10 
这个是引用的问题吗?不懂结果啊。。。
程序代码:
#include<iostream>
using namespace std;

void fun(int &x, int y)
{ int t=x; x=y; y=t;}

int main( )
{ int a[2] = {23, 42};
  fun(a[1],a[0]);
  std::cout<<a[0]<<","<<a[1]<<std::endl;
  return 0;
}
为什么结果没有互换两数?而是两个23.
2013-06-12 14:40
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:2 
要互换就把y改成&y
2013-06-12 14:47
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:2 
x是引用,y不是

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-06-12 14:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
int a, b;
int *p1, p2;   // 这是一个指针还是两个?
int &x1, x2;   // 这样呢?
楼主的错误,多数是这样来的。

btw: 搞通了之后,最好想一想声明格式怎么写才不容易发生这类错误。

授人以渔,不授人以鱼。
2013-06-12 14:57
hey小阳阳
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-11-24
收藏
得分:0 
回复 4楼 TonyDeng
我是知道这里x引用了,y没有。那不引用就换不了两数吗?这是不是和当初学c的指针时的一个引例,不用指针就换不了两数?
2013-06-12 15:26
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
在学习C的时候,我们老师坦言:
C语言里,无法通过函数的参数传递直接交换两个数的值。
(当然这里指的是纯粹的原变量做参数,不考虑指针做参数的情况)

然后老师接着说,在CPP里用&的话就能实现这个功能,

我不太明白,楼主写一个有&的参数,一个没有&的参数是想说明什么。。?

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-12 15:39
hey小阳阳
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-11-24
收藏
得分:0 
回复 6楼 蚕头燕尾
大概就是想说明,没有&是不行的。。。
2013-06-12 15:46
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:2 
回复 7楼 hey小阳阳
alright。。。


看来确实是不行的哈。。。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-12 16:11
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:2 
因为引用会改变了a[1]的值,而a[0]是纯粹的值传递,所以没改变

[ 本帖最后由 邓士林 于 2013-6-12 17:15 编辑 ]

Maybe
2013-06-12 17:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
以下是引用hey小阳阳在2013-6-12 15:26:10的发言:

我是知道这里x引用了,y没有。那不引用就换不了两数吗?这是不是和当初学c的指针时的一个引例,不用指针就换不了两数?

引用是间接寻访数据的一种方式。像如下代码
int x = a[1];
int& y = x;

y是一个引用变量,它实际上就是x,不是指针,而是绝对的x自身,只不过改了名字,不叫x,而是叫y,两个名字是同一个东西,所以使用引用作参数,函数参数的引用变量就是原来的数据,有任何改变都是改变了源数据,能够交换值也是这个原因,故须两个参数都是引用传递才行,否则你改了一个,而另一个却不是源数据本身,那一个就没变化了。

引用是C++等面向对象语言普遍使用的概念,不用指针,不像指针那样需要用地址和解引用才能获得数据的内容,没有诸如&和*等那么多奇怪的符号,C是没有引用的。也就是说,只有你在使用C++编译器来编译程序的時候,才可以使用引用(VC是C++编译器),C语言书是不会教你引用的。

[ 本帖最后由 TonyDeng 于 2013-6-13 19:02 编辑 ]

授人以渔,不授人以鱼。
2013-06-13 18:55
快速回复:这个是引用的问题吗?不懂结果啊。。。
数据加载中...
 
   



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

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