C++ 引用

  • C++推荐引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作,编译器都帮我们做了。

1. 引用的基本使用

void test9()
{
    int a = 10;
    int &b = a;
    
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    //    a = 10
    //    b = 10
    
    b = 20;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    //    a = 20
    //    b = 20

}

2. 引用的注意事项

void test10()
{
    int a = 10;
    int b = 20;
//    int &c;   // 错误,引用必须要初始化
    int &c = a; // 一旦初始化后,就不可以更改引用
    c = b; // 这个是赋值操作,不是更改引用
//    &c = b; // 不能操作指针,更改引用
}

void test11(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
    // 值传递,不会改变外面的值
}

void test12(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
    // 地址传递,会改变外面的值
}

void test13(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
    // 引用传递,会改变外面的值
}
  • 引用做函数的返回值
int& test14()
{
    // 1. 不要返回局部变量的引用
    // 2. 函数的调用可以作为左值
    int a = 10;
    return a; // 报警告:Reference to stack memory associated with local variable 'a' returned
}

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


int main(int argc, const char * argv[]) {
    int &ref1 = test14();
    int &ref2 = test15();
    
    cout << "ref1 = " << ref1 << endl; // ref1 = 32760
    cout << "ref1 = " << ref1 << endl; // ref1 = 32760
    cout << "ref2 = " << ref2 << endl; // ref2 = 10
    cout << "ref2 = " << ref2 << endl; // ref2 = 10
    
    test15() = 1000; // 作为等号左边的值
    
    cout << "ref2 = " << ref2 << endl; // ref2 = 1000
    cout << "ref2 = " << ref2 << endl; // ref2 = 1000
    
    return 0;
}

3. 引用的本质

void test17(int &ref)
{
    ref = 100; // ref是引用,内部转换为 *ref = 100;
}

void test18()
{
    int a = 10;
    
    // 会自动转换为 int *const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改
    int &ref = a;
    
    ref = 20; // 内部发现是ref引用,自动转换为 *ref = 20;
    
    cout << "a1: " << a << endl;
    cout << "ref1: " << ref << endl;
    
    test17(a);
    cout << "a2: " << a << endl;
    cout << "ref2: " << ref << endl;
    
    /** 打印结果:
     a1: 20
     ref1: 20
     a2: 100
     ref2: 100
     */
}

4. 常量引用

void showValue(const int &val)
{
//    val = 100; 这里因为参数加了const,不能修改val的值
    cout << "val = " << val << endl;
}

void test19()
{
    // 作用: 常量引用主要用来修饰形参,防止误操作
    // 在函数形参列表中,可以加const修饰形参,防止形参改变实参
    int a = 10;
    int &r_a = a;
    r_a = 20;
    // int &ref = 10; // 引用必须引一块合法的内存空间,这样写会报错
    
    const int &ref = 10;
    // 但是加上const后,编译器将代码修改为
    // int temp = 10;
    // const int &ref = temp; // 不可修改值
    
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值