1.引用变量
引用是已定义的变量的别名(另一个名称)。如:有一变量x,而y作为变量x的引用,则可以交替使用x和y来表示该变量。就像有两个单词表示同一个意思。
1.1.1.创建引用变量
在c++中,&符号除了用来指示变量的地址外,&的另一个含义就是用来声明引用。例:
int cats;
int & tomcats =cats;
其中,&不是地址运算符,而是类型标识符的一部分。上述声明允许将cats与tomcats互换——它们指向相同的值和内存单元。
1.1.2.引用变量的使用
#include<iostream>
int main() {
using namespace std;
int cats = 100;
int & tomcats = cats;
cout << "cats = " << cats;
cout << ", tomcats = " << tomcats << endl;
tomcats++;
cout << "cats = " << cats;
cout << ", tomcats = " << tomcats << endl;
cout << "cats address = " << &cats << endl;
cout << ", tomcats addresss = " << &tomcats << endl;
return 0;
}
下面是上面的程序的输出:
cats = 100, tomcats = 100
cats = 101, tomcats = 101
cats address = 006FFA38
, tomcats addresss = 006FFA38
请按任意键继续…
从中可知,cats和tomcats的值和地址都相同,无论两个中的哪一个进行相应操作,另一个都会受到影响。
1.1.3.与指针的区别
引用看上去很像伪装的指针。实际上,两者还是同中有异的。
差别之一:
必须在声明引用时将其初始化,而不能像指针那样,先声明,再赋值:
int cat; int & tomcat; tomcat = cat; // 你不能这么做
差别之二:
引用一旦与某个变量关联起来,就将一致效忠于它,也就是说:
int & tomcat = cat;
实际上是下述代码的伪装表示:
int * const p =&cats;
引用 tomcat 扮演的角色与表达式*p相同
若试图改变tomcat 的指向,将发生:
#include<iostream>
int main() {
using namespace std;
int cats = 100;
int & tomcats = cats;
cout << "cats = " << cats;
cout << ", tomcats = " << tomcats << endl;
cout << "cats address = " << &cats ;
cout << ", tomcats addresss = " << &tomcats << endl;
int rats = 50;
tomcats = rats;
cout << "rats = " << rats;
cout << ", cats = " << cats;
cout << ", tomcats = " << tomcats << endl;
cout << "rats address = " << &rats;
cout << ", tomcats address = " << &tomcats << endl;
system("pause");
return 0;
}
结果是:
cats = 100, tomcats = 100
cats address = 008FF990, tomcats addresss = 008FF990
rats = 50, cats = 50, tomcats = 50
rats address = 008FF978, tomcats address = 008FF990
请按任意键继续…
最初,tomcats引用的是cats,随后试图将tomcats作为rats的引用,看似可以,实质tomcats的地址并未发生变化,其实就是
cats = rats; //将rats变量的值赋给cats变量