单链DNA

换了个地址:http://www.cnblogs.com/vizhen/

 

引用

引用是一个目标变量的别名。对引用的一切操作和对变量的直接操作是一样的。引用的声明如下:

【数据类型】【&】【定义的引用名称】=【目标变量名】;

引用不是一种数据类型,并不占存储单元,没有数组的引用。

引用的作用:

  1. 可用做函数参数。引用作为参数传递给函数时,在内存中并没有产生变量实体的副本,它只是源目标变量的一个别名。
  2. 常引用。

    const 【数据类型标识符】&【引用名】=【目标变量名】;

    char x=1;
    const char &rx=x;
    rx=2; //错误:rx是只读的
    x=2; //正确
    这样的好处是可以不用担心变量的值被别名以为的改掉。
  3. 引用作为函数返回值。

    【数据类型】&【函数名】(形参列表){函数体}
    实例:
#include<iostream>
using namespace std;
int temp; //全局变量temp; 
int f1(int x)
{
    temp=(int)(x*x);
    return temp;   
}

int &f2(int x)
{
    temp=(int)(x*x);
    return temp;
}

int main()
{
    int a=f1(5);//系统生产成返回值的副本 
    int b=f2(5);//系统不生成返回值的副本,可以从被调函数中返回一个全局变量的引用 
    int &c=f2(5);//系统不生成返回值的副本,可以从被调函数中返回一个全局变量的引用 
    
    cout<<a<<endl;

    cout<<b<<endl;
    cout<<c<<endl;
    getchar();
} 

注意:不能返回局部变量的值。局部变量在被函数调用返回后就被销毁。那么它返回的引用所指向的内存已经没有任何意义,运行时会出现不可预知的错误。

#include<iostream>
using namespace std;

int &f1(int x)
{
    int tmp;
    tmp=x;
    cout<<"In f1:"<<endl;
    cout<<"&tmp is:"<<&tmp<<endl;
    cout<<"tmp is:"<<tmp<<endl<<endl;
    return tmp;
}

int main()
{
    int &a=f1(5);
    a=9;
    cout<<"In main:"<<endl;
    cout<<"&a is:"<<&a<<endl;
    cout<<"a is:"<<a<<endl;
    getchar();
    return 0;
}

结果:

image

在f1结束后tmp的内存就已经释放,a是tmp的别名虽然还是指向了那段内存,但是已经没有任何意义了。

注意:

  1. 不能返回函数内部new分配的内存引用。因为被函数返回的引用只是作为临时变量出现的,没有被赋予一个实际的变量空间,所以这个引用所指向的空间就无法释放,造成内存泄露。
  2. 可以返回类成员的引用,但最好是const。

posted on 2011-02-04 22:52 Geek.tan 阅读(126) 评论(0)  编辑 收藏 引用 所属分类: C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

公告

coding是我的寂寞,我是谁的寂寞

随笔分类(40)

随笔档案(48)

搜索

积分与排名

最新评论

评论排行榜