C++之引用

2022-10-21  本文已影响0人  二进制人类

概述

引用的本质是给已经存在的变量取别名

定义的步骤

int func(int a,int b){
    return a + b;
}

void test(){
    //1.
    int num = 1;
    int &b = num;
    //2.
    int arr[5]={1,2,3,4,5};
    int (&myArray)[5] = arr;
    //3.
    typedef int ArrayType[5];
    ArrayType &myArray1 = arr;
    //4.
    int &element = arr[1];
    element = 1000;//1,1000,3,4,5
    //5.
    int *p = num;
    int* &myP = p;
    //6.
    int (&myFun)(int,int) = func;
}

引用作为函数的形参

引用作为函数的形参,函数内部可以通过形参引用 修改外部变量的值。

void setData01(int a)//int a= data
{
    a = 100;
}
void setData02(int *p)//int *p = &data;
{
    *p = 100;
}
void setData03(int &b)//int &b=data
{
    //函数内部 b是data的别名 操作b等价操作外部的data
    b = 100;//data=100
}

void test()
{
    int data = 10;
    //函数内部不能修改外部变量值
    //setData01(data);

    //传递变量的地址 函数内部可以修改外部变量的值
    //setData02(&data);

    setData03(data);
    cout<<"data = "<<data<<endl;
}

指针变量和引用作为函数的形参的区别

1、他们的共同点 在函数内部都能修改外部变量的值

2、指针变量:占空间、实参传地址、必须对指针变量取*

3、引用:不占空间、实参传变量、不取*

引用作为函数的返回值类型

链式操作的时候 引用作为函数的返回值类型。

int& getData(void){
    static int data = 100;
    return data; //返回谁 就是谁的别名  不要返回普通局部变量的引用
}
void test(){
    int &ret = getData();
    getData() = 1000;
    cout<<ret<<endl; //1000
}
struct Print
{
    Print& printStr(Print &ob, char *str)
    {
        cout<<str;
        return ob;
    }
};

void test()
{
    Print ob1;                                                     ob1.printStr(ob1,"hehe").printStr(ob1,"xixi").printStr(ob1,"haha").printStr(ob1,"heihei");
}

常引用

//给100去个别名
const int &a = 100;

常引用主要用于函数的形参,函数内部 不能通过常引用修改外部变量的值。

void printData(const int &a)
{
    //a=200;//err
    cout<<"data="<<a<<endl;
}

void test()
{
    int data = 10;
    printData(data);
}

引用的本质

应用的本质是常量指针

int data = 10;
int &a = data; /*等价于->*/ int * const a = &data; 
a = 20; //data = 20


上一篇 下一篇

猜你喜欢

热点阅读