引用的基本使用
作用:给变量起别名 ,语法:数据类型 & 别名 = 原名
注意:引用必须初始化,且初始化之后,就不可更改、
引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
实例:
#include<iostream> using namespace std; //交换函数 //1、值传递 void Swap1(int a, int b) { int temp = a; a = b; b = temp; //cout << "Swap1 a=" << a << " " << "Swap1 b=" << b << endl; //值传递 } //2、地址传递 void Swap2(int * a, int * b) { int temp = *a; * a = * b; * b = temp; //cout << "Swap2 a=" << *a << " " << "Swap2 b=" << *b << endl; //地址传递 } //3、引用传递 void Swap3(int &a , int &b) { int temp = a; a = b; b = temp; cout << "Swap3 a=" << a << " " << "Swap3 b=" << b << endl; //引用传递 } int main() { int a = 10; int b = 20; //Swap1(a, b); //值传递,形参不会修饰实参 //cout << "a=" << a << " " << "b=" << b << endl; //值传递打印:a=10,b=20 //Swap2(&a, &b); //地址传递,形参会修饰实参 //cout << "a=" << a << " " << "b=" << b << endl; //地址传递打印:a=20,b=10 Swap3(a, b); //引用传递,形参会修饰实参 cout << "a=" << a << " " << "b=" << b << endl; //引用传递打印:a=20,b=10 system("pause"); return 0; }
总结:通过引用参数产生的效果同地址传递是一样的,引用的语法更清晰简单
引用做函数返回值
作用:引用是可以作为函数的返回值存在的。用法:函数调用作为左值
注意:不要返回局部变量引用
实例:
#include<iostream> using namespace std; //引用做函数的返回值 //1、不要返回局部变量的引用 int& test1() { int a = 10; //局部变量存放在四区中的 栈区 return a; } //2、函数的调用可以作为左值 int& test2() { static int a = 10; //加上关键字static ,局部变量a就变成了静态变量;静态变量存放在全局区,全局区的数据在程序结束后由系统释放 return a; } int main() { //int &ref = test1(); //cout << "ref=" << ref << endl; //第一次结果正确,是因为编译器做了一次保留 //cout << "ref=" << ref << endl; //第二次结果错误,是因为 栈区 中存放的 局部变量 a 的内存已经被释放 int& ref = test2(); cout << "ref=" << ref << endl; //ref=10 cout << "ref=" << ref << endl; //ref=10 test2() = 1000; //如果函数的返回值是引用,函数的调用可以作为左值 cout << "ref=" << ref << endl; //ref=1000 cout << "ref=" << ref << endl; //ref=1000 system("pause"); return 0; }
引用的本质:
引用的本质在C++内部实现是一个指针常量
实例:
结论:C++推荐使用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了
常量引用:
作用:常量引用主要是用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
实例:
#include<iostream> using namespace std; //常量引用 //主要是用来修饰形参,防止误操作 void ShowVal(const int &val) { //val = 1000; cout << "val=" << val << endl; } int main() { //int a = 10; //int& ref = 10; //引用必须引一块合法的内存空间 const int & ref = 10; //加上const后 编译器将代码修改 int temp = 10; int & ref = temp; //ref = 20; //加入const之后 变为只读,不可修改 int a = 100; ShowVal(a); cout << "a=" << a << endl; system("pause"); return 0; }