最近重新看C++,看到些以前没注意的DD,温故而知新,暂且记下。
引用是能自动间接引用的一种指针,即不必使用间接引用运算符“*”,就可以得到一个引用值。引用可以为变量起别名,它主要用作函数参数以及函数的返回类型。
1 引用的定义
如 int i; int &j=i; j是i的引用。
(1) 定义引用时,必须立即对它进行初始化,不能定义后再赋值。
如 int i; int &j; j=i; 这样是错误的,应该像上面示例中那样定义。
(2) 引用实际上是一种隐式指针,和显式指针不同的是,每次使用引用的变量时,可以不用书写间接引用运算符"*",因此就好像使用变量的另一个别名一样使用引用,但引用的本质不是别名,而是变量的一个指针(隐式的)。
(3) 引用不可以重新赋值,不可使其作为另一个变量的别名。
如 int i,k; int &j=i; j=&k; //最后一句重新赋值,错误。
(4) 当使用&运算符去一个引用的地址时,其值为所引用的变量的地址。
如 int num = 0; int &ref = num; int *p = &ref;
p中保存的是变量num的地址。如果语句为 int *p = ref;则编译出错。
可能会有人不明白,引用的本质不是隐式指针,也就是指针吗?那应该是 ref (not &ref)表示num 的地址才对啊,这样写有什么不对呢。呵呵,前面说过 引用使用起来和别名一样,代表它所引用的变量的值,即 ref 就代表 num,所以要表示 &num(即num 的地址),当然不能也用 ref 表示啊,要不 ref 到底表示 num or &num。既然它做别名用,那就像别名一样用 &ref 表示 &num 吧。(这是偶自己的理解哦^^^^^^^^^)
2 引用参数
引用的一个重要用途就是将引用作为函数的参数,用引用传递取代地址传递,可以使程序 easy 很多。如:
void swap(int &m,int &n) //引用坐函数参数
{
int temp;
temp = m;
m = n;
n = temp;
}
main()
{
int a = 5,b = 10;
swap(a,b); //这样就可以将 a,b 的值交换,不用采用传递地址的方式,简化程序很多
}
3 引用返回值
函数可以返回一个引用,将函数说明为返回一个引用的主要目的是:可以将该函数用在 = 的左边。如:
int &index(int i); //将函数返回类型定义为引用
index(m) = 100; //将函数放在 = 左边,重新赋值,此时 index(m) 的值为100