c++之引用

什么是引用?
引用:给数据起别名

格式:数据类型 数据名 = &数据名;

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int &b = a;
    cout << "a的值是:" << a<<endl;
    cout << b的值是:" << b << endl;
    a = 11;
    cout << " << a << endl;
    cout <<  endl;
    b = 12 endl;
    system(pause");
    return 0;
}

输出:

b引用a,b和a指向相同的内存地址, 所以当其中一个变化,另一个的值也会进行相应的变化。

注意事项:

  • 引用必须初始化;
    int &b;//错误,没被初始化
  • 引用在初始化之后就不能够被改变了;
    int a = 10;
    int &b = a;
    int c = 20;
    b = c;//这里就是错误的。

引用做函数的参数:

作用:参数传递时,可以通过引用的技术让形参修饰实参。

优点:简化指针修改实参。

#include <iostream>
//值传递
void swap1(int a, b) {
    int tmp = a;
    a = b;
    b = tmp;
}
地址传递
void swap2(int* a,1)">int*int tmp = *a;
    *a = *b;
    *b =引用传递,形参可以修饰实参
也就是&a,&b是a,b的别名
void swap3(int &a,1)">int &b) {
     tmp;
}

;
    int b = 20 endl;
    swap1(a,b);
    cout << swap1之后a的值是:swap1之后b的值是: endl;
    swap2(&a,&b);
    cout << swap2之后a的值是:swap2之后b的值是: endl;
    swap3(a,1)">swap3之后a的值是:swap3之后b的值是:;
}

输出:

不难发现,地址传递和引用传递均可以通过形参的改变而影响实参的值。

引用做函数的返回值:

#include<iostream>
不能返回局部变量的引用
int& func() {
    return a;
}

函数的调用可以作为左值
 func2() {
    静态变量,在所有程序结束后才释放
    static  a;
}
int& res = func2();


    cout << res << endl;
    cout << res << endl;
    func2() = 100相当于都是变量a的引用
    cout << res <<;

}

输出:

一句话来说就是:一荣俱荣,一损俱损。 

引用的本质:

本质:引用的本质在C++内部实现实际上是一个指针常量

#include<iostream>
发现是引用,转换为int* const ref = &a;
void func(ref) {
    ref = 100;ref是引用,转换为*ref=100;
}

自动转换成int* const ref = &a;指针常量是指向不可以更改,值可以更改
    int& ref = a;
    20;内部发现ref是引用,自动转换成*ref=20;
    cout << a="<<a << endl;
    cout <<ref="<< ref << endl;
    func(a);
    cout << " << ;

}

输出:

常量引用:

作用:用来修饰形参,防止误操作。

const tmp) {
    tmp= 100;不合法了
}

nt a = ;
int* ref = a;不合法,必须是引用一段合法的内存空间
int* ref2 = 10;合法

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...