C++ 中的引用

简介: # C++引用> 引用是C++新增的复合类型,引用是已定义变量的别名。- 引用的用途:做函数的形参和返回值。 ## 引用的语法 ```c 引用类型 & 引用名 = 原变量名 ``` **案例** ```c++ #include<cstdio> #include<iostream> using namespace std; void swap(int&a,int&b) //通过引用交换数值 { int tmp = a; a = b; b = tmp; } int main() {

C++引用

引用是C++新增的复合类型,引用是已定义变量的别名。

  • 引用的用途:做函数的形参和返回值。

    引用的语法

     引用类型 & 引用名 = 原变量名
    

    案例

    #include<cstdio>
    #include<iostream>
    using namespace std;
    void swap(int&a,int&b) //通过引用交换数值
    {
         int tmp = a;
         a = b;
         b = tmp;
    }
    int main()
    {
        int a = 3;  //(1)
         int b = 5;  //(2)
        printf("%d %d",a,b);//(3)      打印的内容是一样的吗??
        swap(a,b); //(4)
        printf("%d %d",a,b);//(5)
    
    }
    
    • 定义int类型变量并赋值为3

    • 定义int类型变量并初始化为5

    • 打印交换前的变量 ab

    • 调用swap函数对ab进行交换(通过引用)

    • 打印交换后的值


      这段代码的ab经过我们的swap函数调用后,成功的输出了交换后的值

3 5
5 3

足够说明

作为形参的引用会指向形参,类似于指针,调用函数后,实现了真正的交换。

引用的形参和const

在C++中,引用是一个别名,即它是另一个变量的同义词。通过使用引用,可以通过不同的名称访问同一变量的内容。引用通常用于将函数的参数传递给另一个函数或在函数内返回值。

例如,以下代码创建了一个整数类型的引用并将其初始化为变量a的引用:

int a = 5;
int &ref = a;

现在,可以使用ref来访问和修改变量a的值,就像使用变量a一样。

另一方面,const关键字指定了一个变量的值不能被修改。此关键字可应用于任何数据类型(如基本数据类型、类、结构等)。

例如,以下代码声明了一个整数类型的常量:

const int b = 10;

在这个例子中,变量b的值被设置为10,并且不能被修改。如果试图更改该变量的值,则会导致编译错误。

可以将引用和const结合使用来创建常量引用,如下所示:

const int& ref = a;

在这个例子中,使用const关键字将引用ref定义为一个常量引用,它只能访问变量a的值,但不能修改它。

引用可以和指针玩出什么新花样?

  1. 引用参数的指针
2
  1. 指向引用的指针
int main() {
    int a = 0;
    int &ref = a; // 定义引用ref,并使其指向变量a
    int *&ptr = &ref; // 定义指向引用的指针ptr
    *ptr = 123; // 使用指针访问引用所指向的变量并赋值
    std::cout << a << std::endl; // 输出a的值,将会输出123
    return 0;
}
  1. 引用成员变量和指针成员变量
class MyClass {
public:
    MyClass(int &ref, int *ptr) : ref_(ref), ptr_(ptr) {}
    void setRef(int val) { ref_ = val; } // 设置引用成员变量的值
    void setPtr(int val) { *ptr_ = val; } // 设置指针成员变量所指向的变量的值
private:
    int &ref_; // 引用成员变量
    int *ptr_; // 指针成员变量
};

int main() {
    int a = 0;
    int b = 0;
    MyClass obj(a, &b); // 创建对象,并将引用和指针传递给构造函数
    obj.setRef(123); // 调用成员函数设置引用的值
    obj.setPtr(456); // 调用成员函数设置指针所指向的变量的值
    std::cout << a << "," << b << std::endl; // 输出a和b的值,将会输出123,456
    return 0;
}

这些示例代码演示了使用引用和指针结合的一些常见场景。当然,在实际使用时需要根据具体情况进行灵活处理。

引用和typedef有什么区别?

虽然引用和typedef都可以用来给变量取别名,但它们之间有着本质的区别。

  • 引用是一个变量的别名,而typedef是一个类型的别名。引用提供了对变量的直接访问,而typedef则提供了对类型的简单命名。

  • 引用必须在定义时就进行初始化(即指定初始值),一旦初始化完成后就不能再改变引用所绑定的变量。而typedef可以随时使用,也可以用来定义多个变量。

  • 引用只能与其指向的变量绑定在一起,而typedef可以为任何类型创建一种新的名称。引用通常用于传递函数参数、返回函数结果或者作为类成员变量;typedef则常用于简化复杂类型的声明。

下面是一个示例代码,演示了引用和typedef的区别:

#include <iostream>
using namespace std;

typedef int myInt;
// 定义一个函数,使用引用作为参数
void func(int& ref) {
    ref++;
}

int main() {
    // 使用typedef定义一个整型别名
    myInt a = 10;
    // 定义一个引用,并将其初始化为a的别名
    int& b = a;
    cout << "a=" << a << ", b=" << b << endl;
    // 调用函数,传入引用参数
    func(b);
    cout << "After calling func, a=" << a << ", b=" << b << endl;
    return 0;
}

在这个示例中,我们首先使用typedef定义了一个myInt类型,它是int类型的别名。然后,我们定义了一个整型变量a,并将其初始化为10。接着,我们定义了一个引用b,并将其初始化为a的别名。

在调用函数func之前,我们输出了ab的值。然后,我们将b作为参数传递给函数funcfunc会向其传入的引用参数ref所绑定的变量加1。最后,我们再次输出a和b的值,可以看到它们的值都增加了1。

总之,虽然引用和typedef都可以用来取别名,但它们在本质上有着不同的作用和用法。在实际编程中,我们需要根据具体情况选择合适的方式来定义变量或者类型的别名。

目录
相关文章
|
5月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
71 1
|
6月前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
73 2
|
4月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
31 3
|
4月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
5月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
65 5
|
5月前
|
C++
C++引用
C++引用
|
5月前
|
存储 安全 编译器
【C++入门】—— C++入门 (中)_引用
【C++入门】—— C++入门 (中)_引用
36 5
|
5月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
5月前
|
安全 测试技术 C++
C++中的引用
C++中的引用
29 1