«

2 引用

时间:2023-9-20 00:05     作者:wen     分类: C++


[toc]

引用

引用的基本使用

作用:给变量起别名

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

示例:

#include <iostream>

using namespace std;

int main()
{
    int a = 10;
    int* b = &a;

    cout << a << endl;
    cout << *b << endl;

    *b = 100;

    cout << a << endl;
    cout << *b << endl;

    system("pause");
    return 0;
}

引用注意事项

示例:

#include <iostream>

using namespace std;

int main()
{
    int a = 10;
    int b = 20;

    // 1.引用必须初始化
    //int &b;
    int* p= &a;
    cout << p << endl;
    // 2.引用初始化后, 不可改变
  // 这是一个赋值操作,而不是更改引用
    //p = &b;
    cout << p << endl;
    cout << *p << endl;
    cout << a  << endl;

    //int* c = &a;

    system("pause");
    return 0;
}

引用做函数参数

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

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

示例:

#include <iostream>

using namespace std;

// 交换函数

// 1.值传递
void swapA(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
    cout << "a = " << a << " b = " << b << endl;
}
// 2.地址传递
void swapB(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

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

// 这个相当于把指针复制了一份,进行交换和sawpA一样不会改变原始值
void swapD(int* a, int* b)
{
    int* temp = a;
    a = b;
    b = temp;
    cout << "a = " << a << " b = " << b << endl;
}

int main()
{
    int a = 10;
    int b = 20;
    swapA(a, b);
    cout << "a = " << a << " b = " << b << endl;
    //swapB(&a, &b);
    //swapC(a, b);
    cout << "&a = " << &a << " &b = " << &b << endl;
    swapD(&a, &b);
    cout << "a = " << a << " b = " << b << endl;

    system("pause");
    return 0;
}

引用做函数的返回值

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


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

用法:函数调用作为左值


示例:

#include <iostream>

using namespace std;

int& testA()
{
    int a = 10;// 局部变量,在栈区

    return a;
}

int& testB()
{
    static int a = 10;
    return a;
}

int main()
{
    //不要返回局部变量引用
    int& ref = testA();
    cout << "ref = " << ref << endl; // 第一次结果正确, 是因为编译器做了一次保留
    cout << "ref = " << ref << endl; // 第二次调用, 内存已经释放

    int& ref2 = testB();
    cout << "ref2 = " << ref2 << endl;
    cout << "ref2 = " << ref2 << endl;

    // 函数调用作为左值
    testB() = 1000;
    cout << "ref2 = " << ref2 << endl;

    system("pause");
    return 0;
}

引用的本质

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

示例:

#include <iostream>

using namespace std;

// int* const ref = &a;
void func(int& ref)
{
    ref = 100; 
}

int main()
{
    int  a = 10;
    int b = 20;

    // 自动转换为 int* const ref = &a;
    // 指针常量是指向不可改,也说明为什么引用不可更改
    // 引用一旦初始化,就不可以发送改变
    int& ref = a;
    cout << ref << endl;

    ref = 20; // 内部发现ref是引用,自动帮我们转换为: *ref = 20;

    cout << a << endl;

    func(ref);

    cout << a << endl;

    system("pause");
    return 0;
}

常量引用

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

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

示例:

#include <iostream>

using namespace std;

// 加const防止实参被修改
void testA(const int& a)
{
    //a = 1000;
    cout << "a = " << a << endl;
}

int main()
{
    // 常量引用
    // 相当于 int temp = 10; const int& ref = temp;
    const  int& ref = 10;

    int a = 10;
    testA(a);
    system("pause");
    return 0;
}

标签: C/C++ C++核心编程