引用
引用并不是新定义一个变量,而是一个已定义变量的别名。
定义的格式:
类型 &引用变量名 = 已定义的变量名
特点:
- 对一个已定义变量可多次进行引用
- 引用仅仅为别名
- 引用必须进行初始化
引用只能在初始化时引用一次,不能再改变为其他已定义变量引用
下面用代码进行示范:
void test()
{
int a = 5;
int b = 4;
int &c = a;
//c = b; //错误,因为引用不能再改变为其他已定义变量引用
c = 10; //a = 10,因为c为a的别名
int &d = c;
//int &e; //错误,因为引用必须进行初始化
d = 8; //a = 8,因为d为a,c的别名
}
const引用
不能通过const引用来对变量进行赋值。
下面用代码进行示
void test ()
{
int d1 = 4;
const int & d2 = d1;
d1 = 5;
//d2 = 6; //不能给常量(能被修改的量)赋值
const int d3 = 1;
const int & d4 = d3;
//int&d5 = d3; //不能引用常量
const int & d6 = 5; // 常量具有常性,只有常引用可以引用常量
double d7 = 1.1;
//int& d8 = d7;//d7是double类型,d8是int,d7赋值给 d8时要 生成一个临时变量
// 也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。
}
引用做参数
如果形参为引用类型,那么形参则为实参的别名。如果对形参进行改变也会对实参进行改变。引用做参数与指针做参数相似,只不过引用做参数不需要传变量的地址。
如果函数的返回值为引用,那么引用对象不能为一个临时变量,返回对象的生命周期大于当前函数的作用域。
引用与指针
引用与指针的关系
- 在语言的内部引用其实是用指针来实现的
引用与指针的相同点
- 引用和指针都是地址的概念
引用与指针的区别:
- 引用必须进行初始化,而指针可以不进行初始化
- 引用不能为空,而指针可以为空
- 引用不可再引用其他变量,指针可以再指向其地址
- 引用的sizeof()得到的是引用类型的sizeof(),指针的sizeof()得到的是指针指向地址的sizeof()
- 对引用++得到的是引用内容++的结果,对指针++得到的是指针指向地址++的结果
- 引用是常量所以没有const,指针有const
下面用代码进行示
void test()
{
double a = 10;
char b = 0;
double *c = &a;
char *d = &b;
double &e = a;
char &f = b;
cout << "sizeof(c):" << sizeof(c) << endl;
cout << "sizeof(d):" << sizeof(d) << endl;
cout << "sizeof(e):" << sizeof(e) << endl;
cout << "sizeof(f):" << sizeof(f) << endl;
cout << "++c:" << ++c << endl;
cout << "++e:" << ++e << endl;
}
运行结果:
总结:指针比引用更加强大也更加灵活,但同时也更加难以控制更加危险。