CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

关于引用参数传递的一个问题

楼主xietnt(雷管)2005-01-01 08:58:39 在 .NET技术 / VC.NET 提问

近日刚刚学vc.net  
  遇到一个问题程序如下:  
  #include   "stdafx.h"  
   
  #include   <conio.h>  
  #include   <iostream.h>  
  #include   <sys/timeb.h>  
  #include   <time.h>  
   
  class   Book  
  {  
        public:  
              int   No;  
              Book(int   n);  
              ~Book();  
  };  
   
  Book::Book(int   n)  
  {  
        No=n;  
  }  
   
  Book::~Book()  
  {  
  }  
   
  void   Add(Book   b) //   普通参数传递  
  {  
  b.No++;  
  }  
   
  void   AddRef(Book   &   b) //   引用参数传递  
  {  
  b.No++;  
  }  
   
  int   _tmain(int   argc,   _TCHAR*   argv[])  
  {  
          Book   B1(1); //   临时变量  
   
          int   i;  
          struct   timeb   CurTime;  
          char   TimeMes[100];  
          char   *timeline;  
   
   
          //   计算内容  
          for(i=0;i<10000000;i++)  
              AddRef(B1);  
  //   修改此句为:Add(B1);  
      //   Add(B1);  
          cout<<B1.No<<endl;  
   
   
  getch();  
   
  return   0;  
  }  
  使用引用参数传递的时候结果是10000001  
  而使用普通参数传递的时候结果却是1。  
  为什么引用参数传递与普通参数传递结果不一样   `?  
   
  3q``` 问题点数:20、回复次数:4Top

1 楼somedummy(某人马甲)回复于 2005-01-01 14:40:55 得分 0

这个……  
   
   
  似乎不一样才对吧?引用不仅影响语法,还影响了传参时候的代码的行为Top

2 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2005-01-01 17:27:33 得分 20

void   Add(Book   b) //   普通参数传递  
  {  
  b.No++;   //   修改的是一个临时的Book对象   此对象是b的拷贝   函数执行完后   自动析构  
  }  
   
  void   AddRef(Book   &   b) //   引用参数传递  
  {  
  b.No++;   //   修改的是实参本身!!      
  }  
  引用:  
  1. 避免   临时对象的copy之类的.  
  2.     可以直接修改实际参数本身  
   
  如果不想被修改   那么就  
  cosnt   Book   &b   传递   常引用   避免临时对象..Top

3 楼xietnt(雷管)回复于 2005-01-02 00:16:08 得分 0

如何修改才能使Add(B1)也=10000001?Top

4 楼somedummy(某人马甲)回复于 2005-01-02 10:47:47 得分 0

似乎不是用引用的话就没有办法做到,要不然传递指针也可以(不过这样的话就不是按值传递了,另外语法也要修改)。Top

相关问题

  • *** 有人在家吗? 参数引用问题, LPVOID参数 传递引用
  • C#是否支持参数的引用传递
  • 函数引用传递参数具体是如何实现的?
  • 请教:引用 传递参数问题 swap1(x,y) swap1(&x,&y)
  • 关于java参数是传递引用的不解
  • 紧急! 怎样把vector当引用参数传递?
  • 如何按地址或引用传递数组作为函数参数?
  • 指针和引用在传递参数是有什么区别呀????
  • java中如何使参数传递按传"引用"方式进行?
  • 请问一个方法或类传递引用参数的问题。

关键词

  • 引用参数传递
  • book
  • 问题
  • include
  • char

得分解答快速导航

  • 帖主:xietnt
  • beyondtkl

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo