c++引用

2022-11-08  本文已影响0人  arkliu
int a = 3;
int &ra = a; // 创建a的引用

引用的本质

int main() {
    int a = 3;
    int &ra = a; // 创建a的引用
    int * const rb = &a; // 引用的本质是指针常量,引用一旦创建必须初始化,并且引用的指向将不能改变

    cout<<"a的地址:"<<&a<<"   a的值:"<<a<<endl;
    cout<<"ra的地址:"<<&ra<<"   ra的值:"<<ra<<endl;
    cout<<"rb的地址:"<<rb<<"   a的值:"<<*rb<<endl;

    cout << "==================="<<endl;
    ra = 6;

    cout<<"a的地址:"<<&a<<"   a的值:"<<a<<endl;
    cout<<"ra的地址:"<<&ra<<"   ra的值:"<<ra<<endl;
    cout<<"rb的地址:"<<rb<<"   a的值:"<<*rb<<endl;
    return 0;   
}
image.png

引用用于函数的参数

引用传递形参的改变,会影响原有的参数。

void swap(int &ra, int &rb) {
    int temp;
    temp = ra;
    ra = rb;
    rb = temp;
}

int main() {
    int a = 3;
    int b = 4;
    swap(a, b);

    cout<<"a:"<<a<<"   b:"<<b<<endl;
    return 0;   
}
image.png

使用引用简化二级指针传参

#include <iostream>
using namespace std;

void fun1(int **p) {
    *p = new int(3);
    cout <<"  fun1的地址:"<< *p  << "  fun1的值:"<<**p<<endl;
}

void fun2(int *&p) {
    p = new int(5);
    cout <<"  fun1的地址:"<< p  << "  fun1的值:"<<*p<<endl;
}

int main() {
    int *p = nullptr;
    fun1(&p);
    cout <<"  main的地址:"<< p  << "  main的值:"<<*p<<endl;

    cout <<"--------------"<< endl;
    fun2(p);
    cout <<"  main的地址:"<< p  << "  main的值:"<<*p<<endl;
    return 0;   
}

image.png

引用用于函数返回值

int& fun() {
    int i = 10;
    return i;
}
int main() {
    int& a = fun(); 
    return 0;   
}
//返回静态成员
int& fun() {
    static int i = 10;
    return i;
}
int main() {
    int& a = fun();
    cout << "a = "<<a<<endl;
    return 0;   
}

// 返回函数形参
int& fun(int &rb) {
    rb++;
    return rb;
}
int main() {
    int a = 5;
    int &rb = fun(a);
    cout << "a = "<<a<<"   rb = "<<rb<<endl;
    return 0;   
}
int& fun(int &rb) {
    rb++;
    return rb;
}
int main() {
    int a = 5;
    fun(a) = 33;
    cout << "a = "<<a<<endl;
    return 0;   
}
image.png
上一篇 下一篇

猜你喜欢

热点阅读