引用

2.1 引用的基本使用

作用: 给变量起别名

语法: 数据类型 &别名 = 原名

int main(int argc, char const *argv[])
{
    int a = 10;
    cout << a << endl;
    int & q = a;
    q = 20;
    cout << q << endl;
    cout << a << endl;
    return 0;
}

共同指向一个内存

2.2 引用注意事项

引用必须初始化 引用在初始化后,不可以改变

int main(int argc, char const *argv[])
{
    int a = 10;
    cout << a << endl;
    // int &b;   //错误,引用必须初始化
    int & b = a;
    int c = 20;
    b = c;  //赋值操作,而不是更改引用,将3复制到b指向的内存
    cout << a << endl;   //20
    cout << b << endl;   //20
    cout << c << endl;   //20
    return 0;
}

2.3 引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

优点:可以简化指针修改实参

//3. 引用传递
void mySwap03(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

2.4 引用做函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用作为左值

// 函数引用作为左值
int & test(){
    static int a =10;   //静态变量在全局区,程序结束后由系统释放
    return a;
}

int main(int argc, char const *argv[]) { int & a = test(); cout << a << endl; //10 test() = 1000; cout << a << endl; //1000

return 0;

test调用完返回a的引用,相当于把a返回,test() = 1000;-> a = 1000;

2.5 引用的本质

本质:引用的本质在c++内部实现是一个指针常量.

//发现是引用,转换为 int* const ref = &a;
void func(int& ref){
    ref = 100; // ref是引用,转换为*ref = 100
}
int main(){
    int a = 10;
//自动转换为 int* const ref = &amp;a; 指针常量是指针指向不可改,也说明为什么引用不可更改
int&amp; ref = a; 
ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;

cout &lt;&lt; "a:" &lt;&lt; a &lt;&lt; endl;
cout &lt;&lt; "ref:" &lt;&lt; ref &lt;&lt; endl;

func(a);
return 0;

}

C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了

2.6 常量引用

作用:常量引用主要用来修饰形参,防止误操作

在函数形参列表中,可以加==const修饰形参==,防止形参改变实参

//引用使用的场景,通常用来修饰形参
void showValue(const int& v) {
    //v += 10;
    cout << v << endl;
}

int main() {

//int&amp; ref = 10;  引用本身需要一个合法的内存空间,因此这行错误
//加入const就可以了,编译器优化代码,int temp = 10; const int&amp; ref = temp;
const int&amp; ref = 10;

//ref = 100;  //加入const后不可以修改变量
cout &lt;&lt; ref &lt;&lt; endl;

//函数中利用常量引用防止误操作修改实参
int a = 10;
showValue(a);

system("pause");

return 0;

}