C++引用

简介: C++引用

一、引用的基本使用

引用:给变量起别名 数据类型 &别名=原名

#include <iostream>
 
using namespace std;
 
int main() {
//    引用:给变量起别名 数据类型 &别名=原名
    int a = 10;
    int &b = a;
    cout << "b=" << b << endl;
    cout << "a=" << a << endl;
    b = 100;
    cout << "b=" << b << endl;
    cout << "a=" << a << endl;
    cout << "&a=" << &a << endl;
    cout << "&b=" << &b << endl;
    return 0;
}
 
 
b=10
a=10
b=100
a=100
&a=0x63fe14
&b=0x63fe14

二、引用的注意事项

1、引用必须初始化;

2、引用初始化后,不可以改变。

#include <iostream>
 
using namespace std;
 
int main() {
    int a = 10;
// 1、引用必须初始化
//int &b; 错误,必须初始化
//2、引用初始化后,不可以改变。
    int &b = a;
    int c = 10;
    b = c;
    cout << "a=" << a << endl;
    cout << "b=" << b << endl;
    cout << "c=" << c << endl;
 
    return 0;
}
 
 
a=10
b=10
c=10

三、引用做函数参数

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

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

#include <iostream>
 
using namespace std;
 
//交换函数
//1、值传递
void mySwap01(int a, int b) {
    int tem = a;
    a = b;
    b = tem;
}
 
//2、地址传递
void mySwap02(int *a, int *b) {
    int tem = *a;
    *a = *b;
    *b = tem;
}
 
//3、引用传递
void mySwap03(int &a, int &b) {
    int tem = a;
    a = b;
    b = tem;
}
 
int main() {
    int a = 10;
    int b = 20;
//    mySwap01(a, b); //值传递,形参不能修饰,实参
//    mySwap02(&a, &b); //地址传递,形参可以修饰,实参
    mySwap03(a,b);
    cout << "a=" << a << endl;
    cout << "b=" << b << endl;
 
    return 0;
}
 
 
a=20
b=10

四、引用做函数返回值

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

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

用法: 函数调用作为左值。

#include <iostream>
 
using namespace std;
 
//引用做函数的返回值
//1、不要返回局部变量的引用
int &test01() {
    int a = 10;
    return a;
}
 
//2、函数的调用可以作为左值
int &test02() {
    static int a = 10;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
    return a;
}
 
int main() {
    int &ref = test01();
//    cout << ref << endl; //编译器优化
//    cout << ref << endl; //发生错误
    int &ref2 = test02();
    cout << ref2 << endl;
    cout << ref2 << endl;
//    函数的调用可以作为左值
    test02() = 1000;
    cout << ref2 << endl;
    cout << ref2 << endl;
    return 0;
}
 
 
10
10
1000
1000

五、引用的本质

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

#include <iostream>
 
using namespace std;
 
//编译器自动转换为int *  const ref=&a;
void func(int &ref) {
    ref = 100;//ref是引用,转换为*ref=100
}
 
 
int main() {
    int a = 10;
//    自动转换为int* const=ref=&a;指针常量指向不可改,可以修改值
    int &ref = a;
    ref = 20;//编译器自动转换 *ref=20;
    cout<<"a="<<a<<endl;
    cout<<"ref="<<ref<<endl;
    func(a);
    cout<<"a="<<a<<endl;
    cout<<"ref="<<ref<<endl;
    return 0;
}
 
 
a=20
ref=20
a=100
ref=100

六、常量的引用

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

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

#include <iostream>
 
using namespace std;
 
//打印数据 const防止修改
void showVaule(const int &val) {
    cout << val << endl;
}
 
int main() {
//    常量引用
// 使用场景:用来修饰形参,防止误操作
    int a = 10;
//加上const后,编译器将代码修改 int tem=p10; const int & ref=temp;
//    const int &ref = 10;
//    ref=20;
    int b = 20;
    showVaule(b);
    cout << b << endl;
    return 0;
}
 
 



目录
相关文章
|
17天前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
21 1
|
1月前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
36 2
|
1月前
|
C++
C++程序中对象成员的引用
C++程序中对象成员的引用
28 2
|
3天前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
32 5
|
14天前
|
存储 安全 编译器
【C++入门】—— C++入门 (中)_引用
【C++入门】—— C++入门 (中)_引用
21 5
|
12天前
|
C++
C++的引用定义语法和应用
C++的引用定义语法和应用
|
15天前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
22天前
|
安全 测试技术 C++
C++中的引用
C++中的引用
10 1
|
24天前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
14 2
|
27天前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```