引用变量(cite):c++的一种新的复合类型,引用是已定义得变量的别名。
用途:用来当做函数得形式参数,把引用变量用作参数,函数使用原始数据,而不是它得副本。
声明语法:
int a;
int & cite_a=a;
int & 指的是指向int的引用。
通过使用&类型说明符来声明引用,注意这里的&符号不是取地址运算符,在c和c++中使用&符号来指示变量的地址,c++给&符号赋予了另一个含义,将其用来声明引用。
//程序清单8.2
#include<iostream>
using namespace std;
int main()
{
int a = 123456;
int & cite_a = a;
cout << "a=" << a;
cout << ",cite_a=" << cite_a<<endl;
cite_a++;
cout << "a=" << a;
cout << ",cite_a=" << cite_a<<endl;
cout << "&a=" << &a;
cout << ",&cite_a=" << &cite_a << endl;
system("pause");
return 0;
}
从这个例子可以看出 a与cite_a得值相同 地址相同 cite_a的值加一a的值也加一 说是ctie_a作为a变量的别名。
a与cite_a指向相同的值和内存单元。
这里注意必须在声明引用时给其初始化(赋初始值)。
——————————————————————————————————
引用看上去像伪装表示的指针,但实际上,引用还是区别与指针的。
其中差别之一就是,必须在声明引用时将其初始化,而不能像指针那样,先声明,在赋值。
引用更接近const指针,必须创建时进行初始化,一旦与某个变量关联起来,就将一直效忠于它。
int & cite_a =a;
是下面代码的伪装:
int * const pa =&a;
如果试图将a变量的引用改为b变量的引用的话:
//程序清单8.3
#include<iostream>
using namespace std;
int main()
{
int a = 101;
int & cite_a = a;
cout << "a=" << a << ",cite_a=" << cite_a << endl;
cout << "&a=" << &a << ",&cite_a=" << &cite_a << endl;
cout << endl;
int b = 20;
cite_a = b;
cout << "b=" << b << endl;
cout << "a=" << a << ",cite_a=" << cite_a << endl;
cout << "&b=" << &b << endl;
cout << "&a=" << &a << ",&cite_a=" << &cite_a << endl;
system("pause");
return 0;
}
cite_a最初是a变量的引用,然后程序试图将cite_a作为b变量的引用:
一开始还以为是成功的,但仔细查看其实是把b变量的值赋值给a变量,因为cite_a是a变量的引用:
总之说,可以通过初始化来设置引用,但不能通过赋值来设置。