变量的引用
引用:一个变量的别名。对引用的操作就是对变量的直接操
作。它本身不是变量名,也没有类型,定义时,也不会分配内存空间- #include<iostream>
-
-
int main()
-
{
-
using namespace std;
-
int m=5;
-
int &n=m; //给m取一个别名n,前面的int不是n的类型,而是变量目标m的类型
-
n=6;
-
cout<<m<<endl;
-
return 0;
-
}
结果输出 6,
验证了:对引用的操作,就是对它引用的变量进行操作- ywx@yuweixian:~/yu/c++/bieming$ g++ -o bie bie.cpp
-
ywx@yuweixian:~/yu/c++/bieming$ ls
-
bie bie.cpp
-
ywx@yuweixian:~/yu/c++/bieming$ ./bie
-
6
-
ywx@yuweixian:~/yu/c++/bieming$
变量的引用注意:
1. & 在此不是求地址运算,而是起标识作用
2. 类型标识符 是指 目标变量的类型
3. 声明引用时,必须同时对其进行初始化
4. 引用声明完毕后,相当于目标变量名有两个名称,即该目
标原名称和引用名,且不能再把该引用名作为其他变量名的别
名
5. 声明一个引用,不是新定义一个变量,它只表示该引用名
是目标变量名的一个别名,它本身不是一种数据类型,因此引
用本身不占存储单元,系统也不给引用分配存储单元,
故:对引用求地址,就是对目标变量就求地址,&ra 与&a相等
6. 不能建立数组的引用,因为数组是一个有若干个元素组成
的集合,所以无法建立一个数组的别名
7. 不能建立引用的引用,不能建立指向引用的指针。因为引
用不是以一种数据类型,所以没有引用的引用,没有引用的指
针引用的主要功能:
1. 传递函数的参数
2. 返回一个引用
1. 传递函数的参数- void func(int &x) n的引用:int &x=n x是n的别名,对应相同的空间
-
{
-
x=x+10;
-
}
-
....
-
int n=0;
-
func(n);
-
cout<<"n="<<n<<endl; 输出n=10,相同的空间
- void main()
-
{
-
int n=100;
-
// int &m=f(n); 不能建立引用的引用,所以这句是错的
- f(n)=200; 引用,可以是赋值表达式的左值
-
cout<<m<<endl;
-
}
-
-
int& f(int &a)
-
{
-
return a; 返回一个引用
-
}
引用必须有效:
1. 不能返回局部变量的引用
2. 不能建立数组的引用
3. 不能建立 new 对象的引用
4. 不能建立引用的引用1. 不能返回 局部变量的引用
- void main()
-
{
-
cout<<fun()<<endl;
-
}
-
-
int &fun()
-
{
-
int a=10; 这里a是一个局部变量,当函数调用结束时,局部变量a就会从栈中释放掉
-
int &b=a; 如果变量a都没了,那么引用b 又是谁的别名呢??
-
return b; 所以,禁止 返回局部变量的引用
-
}
3. 不能建立 new 对象的引用
- int &r=*(new int(99)); 无名的变量空间
- 所以r就是无名的引用,没有变量名
-
cout<<r<<endl;
- new 建立后,需要 delete 释放
-
delete r; 但是 这里r是无名变量,无法释放内存
- delete r;是错误的语句,r是引用,不是指针
2. 不能 建立数组的引用- char name[4]="liu";
-
-
char &p=name; 引用的定义是:对变量名的引用,而name本身不是变量名,而是一个地址,是一个常数
-
-
cout<<p<<endl;
4. 不能建立引用的引用 说明是引用:对变量的一个引用,引用本身没有类型,没有
地址空间- #include<iostream.h>
-
void main()
-
{
-
int a=10;
-
int &b=a;
-
int &c=b; 违背语法规则
-
cout<<b<<endl;
-
cout<<c<<endl;
-
}
对象引用的声明
- CStudent student;
-
-
CStudent &stu=student;
阅读(500) | 评论(0) | 转发(0) |