C++中的引用

简介: C++中的引用

引用

  • 引用的基本使用

作用:给变量起别名

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

示例

int main()
{
    int a = 10;
    int& b = a;
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    b = 100;
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}

2.引用的注意事项

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

示例

int main()
{
    int a = 10;
    int b = 20;
    //int &c;    //错误,引用必须初始化
    int& c = a;   //一旦初始化后,就不可以更改
    c = b;  //这是赋值操作,不是更改应用
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    cout << "c= " << a << endl;
    return 0;
}

int a=10;

int &b=a;

(1)引用必须要初始化

int &b; //错误

(2)引用一旦初始化后,就不可以更改了

int &b=c; //错误


3.引用做函数参数

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

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

先介绍一下函数传参的方式

(1)值传递

void swap01(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap01(a, b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}

使用值传递时,形参的改变不会影响到实参的改变,因此经过swap函数后,a和

b的值仍然不变

2)地址传递

void swap02(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap02(&a, &b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}


地址传递参数时,形参会通过实参的地址来修饰实参,因此在上面的代码中,a和b的值会发生改变

(3)引用传递

void swap03(int& a, int& b)
{
    int temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap03(a, b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}


引用传递,形参会修饰实参

总结:通过引用参数产生的效果同地址传参是一样的。引用的语法更清楚简单

4.引用做函数返回值

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

错误示例

int& test01()
{
    int a = 10;   //局部变量存放在四区中的栈区
    return a;
}
int main()
{
    int& re = test01();
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    return 0;
}

返回局部变量的引用时,得到的结果可能是错误的

引用可以返回全局区的变量

如:

int& test02()
{
    static int a = 10;   //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
    return a;
}
int main()
{
    int& re = test02();
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    return 0;
}

函数的调用可以作为左值

int& test02()
{
    static int a = 10;   //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
    return a;
}
int main()
{
    int& re = test02();
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    test02() = 1000;     //如果函数的返回值是引用,这个函数调用可以作为左值
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    return 0;
}

如果函数的返回值是引用,这个函数调用可以作为左值

5.引用的本质

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


目录
相关文章
|
3月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
48 1
|
4月前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
53 2
|
2月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
22 3
|
2月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
3月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
52 5
|
3月前
|
C++
C++引用
C++引用
|
3月前
|
存储 安全 编译器
【C++入门】—— C++入门 (中)_引用
【C++入门】—— C++入门 (中)_引用
31 5
|
3月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
2月前
|
C++
C++基础知识(二:引用和new delete)
引用是C++中的一种复合类型,它是某个已存在变量的别名,也就是说引用不是独立的实体,它只是为已存在的变量取了一个新名字。一旦引用被初始化为某个变量,就不能改变引用到另一个变量。引用的主要用途包括函数参数传递、操作符重载等,它可以避免复制大对象的开销,并且使得代码更加直观易读。