版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
引用类型
如果为某个变量分配一个引用类型,则该变量将引用(指向)原始值,类似为它创建了一个终身别名,效果类似指针
// helloworld.cpp: 定义控制台应用程序的入口点。
//
#include <iostream>
using namespace std;
//命名空间
int main()
{
/********* 引用类型 **********/
int a = 111;
int & a1 = a; // a1是引用类型,a1就是a的别名,他们是同一个变量 &是去地址符
cout << a << " " << a1 << endl;
cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量
a1 = 333;
cout << a << " " << a1 << endl;
cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量
int b = 555;
return 0;
}
输出
111 111
008FF800 008FF800
333 333
008FF800 008FF800
由输出可以看到,输出的值是一样的,地址也是一样的。
接下来看一下引用变量的作用
构造一个swap函数用于改变两个变量的值
以下仔细看swap函数和swap2函数的形式参数,swap不是用的地址,swap2用的是地址
// helloworld.cpp: 定义控制台应用程序的入口点。
//
#include <iostream>
using namespace std;
//命名空间
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
void swap2(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 111;
int & a1 = a; // a1是引用类型,a1就是a的别名,他们是同一个变量 &是去地址符
cout << a << " " << a1 << endl;
cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量
a1 = 333;
cout << a << " " << a1 << endl;
cout << &a << " " << &a1 << endl; // a 和 a1地址一样 是同一个变量
int b = 555;
swap(a,b);
cout << a << " " << b << endl;
swap2(a,b);
cout << a << " " << b << endl;
return 0;
}
最后发现swap函数没有互换值,但是swap2互换了
引用被赋值的时候,必须初始化,没有空引用,一旦初始化,终身绑定
引用和指针的区别是,指针可以不初始化、指针的值可以变化、可以为NULL,有指针的指针,没有引用的引用