摘要载入中…    请稍等…












内容载入中…    请稍等…

如长时间看不到内容,请关闭浏览器,重新打开此页!

芯友首页 应用软件 编程开发 网络硬件 资源下载 动漫音乐 精美图库 芯友论坛 视频教程 电脑技术QQ群:73422782
 ★★photoshop学友-史上最强播放器★★
 位置:编程开发>C++>C++入门教程
◎→ 本类最新
c/c++中利用数组名和指针进行排序
c/c++数组排序及计算平均值思考
c++入门教程的补充说明(3)
c++入门教程的补充说明(2)
c++入门教程的补充说明(1)
终止函数与return()函数的差别
命令行参数的原理
◎→相关资源
C语言入门视频教程
C#编程WinForm入门视频
Asp.net入门视频教程下载
VC++编程视频教程下载
VB窗体文章
HTML入门教程
C++入门教程
◎→ 热门资源
类构造函数与析构函数 2
类构造函数与析构函数 1
面向对象的编程入门篇 6我们最后
面向对象的编程入门篇 5
面向对象的编程入门篇
面向对象的编程入门篇 3
面向对象的编程入门篇 2

c++入门教程的补充说明(4)


日期:2008-10-20 19:58:22    来源:互联网
   

最后的一种情况是函数返回引用,并且发值赋给一个引用的情况!


//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
#include <string>
using namespace std;

float c;
float& test(float,float);
void main(int argc,char* argv[])
{
float &pn=test(3.0f,1.2f);
cout<<pn;
cin.get();
}

float &test(float a,float b)
{
c=a*b;
return c;
}



这种情况同样也不产生临时变量,可读和性能都很好,但有一点容易弄错,就是当c是某个函数的局部变量或者是在堆内存中临时开辟后来又被fee掉了以后的区域,这种情况和返回的指针是局部指针的后果一样严重,会导致引用指向了一个不明确的地址,这种情况在内存中情况见下图!



由于这种情况存在作用域的问题,故我们推荐采用第三种方式处理!

接下来我们说一个利用引用作为左值参与计算的例子,这一点一非常重要,对于理解返回引用的函数是非常有帮助的!



//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
#include <string>
using namespace std;

float c;
float& test(float,float);
void main(int argc,char* argv[])
{
float &pn=test(3.0f,1.2f);
cout<<pn<<endl;
test(3.0f,1.2f)=12.1;//把函数作左值进行计算!
cout<<pn;
cin.get();
}

float &test(float a,float b)
{
c=a*b;
return c;
}


通常来说函数是不能作为左值,因为引用可以做为左值,所以返回引用的函数自然也就可以作为左值来计算了.

在上面的代码中

float &pn=test(3.0f,1.2f);

进行到这里的时候pn已经指向到了目标c的地址了.

接下来运行了

test(3.0f,1.2f)=12.1;

把函数作左值进行计算,这里由于test是返回引用的函数,其实返回值返回的地址就是c的地址,自然c的值就被修改成了12.1  [1]
Tags: 

芯友网版权所有 1999-2006 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 联系我们