Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4263284
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-04-19 09:00:09

                         变量的引用

引用:一个变量的别名。对引用的操作就是对变量的直接操

作。它本身不是变量名,也没有类型,定义时,也不会分配内存空间


  1. #include<iostream>

  2. int main()
  3. {
  4.     using namespace std;
  5.     int m=5;
  6.     int &n=m;          //给m取一个别名n,前面的int不是n的类型,而是变量目标m的类型
  7.     n=6;
  8.     cout<<m<<endl;
  9.     return 0;
  10. }

结果输出  6,

验证了:对引用的操作,就是对它引用的变量进行操作


  1. ywx@yuweixian:~/yu/c++/bieming$ g++ -o bie bie.cpp
  2. ywx@yuweixian:~/yu/c++/bieming$ ls
  3. bie bie.cpp
  4. ywx@yuweixian:~/yu/c++/bieming$ ./bie
  5. 6
  6. ywx@yuweixian:~/yu/c++/bieming$


变量的引用注意:

1. & 在此不是求地址运算,而是起标识作用

2. 类型标识符 是指 目标变量的类型

3. 声明引用时,必须同时对其进行初始化

4. 引用声明完毕后,相当于目标变量名有两个名称,即该目

标原名称和引用名,且不能再把该引用名作为其他变量名的别



5. 声明一个引用,不是新定义一个变量,它只表示该引用名

是目标变量名的一个别名,它本身不是一种数据类型,因此引

用本身不占存储单元,系统也不给引用分配存储单元,
 
 故:对引用求地址,就是对目标变量就求地址,&ra 与&a相等

6. 不能建立数组的引用,因为数组是一个有若干个元素组成

的集合,所以无法建立一个数组的别名

7. 不能建立引用的引用,不能建立指向引用的指针。因为引

用不是以一种数据类型,所以没有引用的引用,没有引用的指





引用的主要功能:

1. 传递函数的参数

2. 返回一个引用



1. 传递函数的参数


  1. void func(int &x)   n的引用:int &x=n     x是n的别名,对应相同的空间
  2. {
  3.   x=x+10;
  4. }
  5. ....
  6. int n=0;
  7. func(n);
  8. cout<<"n="<<n<<endl 输出n=10,相同的空间


  1. void main()
  2. {
  3.    int n=100;
  4. // int &m=f(n) 不能建立引用的引用,所以这句是错的
  5.  f(n)=200;  引用,可以是赋值表达式的左值
  6.    cout<<m<<endl;
  7. }

  8. int& f(int &a)
  9. {
  10.   return a;  返回一个引用
  11. }


引用必须有效:

1. 不能返回局部变量的引用

2. 不能建立数组的引用

3. 不能建立 new 对象的引用

4. 不能建立引用的引用





1. 不能返回 局部变量的引用

  1. void main()
  2. {
  3.   cout<<fun()<<endl;
  4. }

  5. int &fun()
  6. {
  7.   int a=10;         这里a是一个局部变量,当函数调用结束时,局部变量a就会从栈中释放掉

  8.   int &b=a;         如果变量a都没了,那么引用b 又是谁的别名呢??  

  9.   return b;         所以,禁止 返回局部变量的引用
  10. }




3. 不能建立 new 对象的引用

  1. int &r=*(new int(99));  无名的变量空间
  2.              所以r就是无名的引用,没有变量名
  3. cout<<r<<endl;
  4.              new 建立后,需要 delete 释放
  5. delete r;   但是 这里r是无名变量,无法释放内存
  6.             delete r;是错误的语句,r是引用,不是指针


2. 不能 建立数组的引用


  1. char name[4]="liu";

  2. char &p=name;      引用的定义是:对变量名的引用,而name本身不是变量名,而是一个地址,是一个常数

  3. cout<<p<<endl;





4. 不能建立引用的引用



  说明是引用:对变量的一个引用,引用本身没有类型,没有

地址空间

  1. #include<iostream.h>
  2. void main()
  3. {
  4.   int a=10;
  5.   int &b=a;
  6.   int &c=b;       违背语法规则
  7.   cout<<b<<endl;
  8.   cout<<c<<endl;
  9. }



对象引用的声明

  1. CStudent student;

  2. CStudent &stu=student;



阅读(465) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~