c++---引用和指针

更多点子:c++—目录索引(知识小渠道)


引用
引用不是定义一个变量,而是给一个已经定义好的变量重新起一个名字
类型&引用变量名=已定义过的变量名
特点
1 一个变量可以取多个别名
2 引用必须初始化
3 引用只能在初始化的时候引用一次,不能改变为引用其他的变量

void Test1()
{
    int a = 1;
    int& b = a;
    cout<<"a:"<<&a<<endl;
    cout<<"b:"<<&b<<endl;
    a=2;
    b=3;
    cout<<"a "<<a<<endl;// 3
    int& c = b;
    c=4;
    cout<<"c "<<c<<endl;// 4 引用一个引用变量,别名的别名
}

const 引用
const的不能给非const,就是说权限只能被缩小不能被放大,可读可写的只能给可读的
不同类型之间不能直接引用,必须加上const,而且还有可能读的时候丢精度
临时变量

void Test2()
{
    int a=1;
    const int& b=a;
    a =2;//a变b也会跟着变
    //b=3;//b是const常亮,这就不可以赋值

    const int c=1;
    const int& d=c;
    // const int& e=c;//const相当于常量,常量具有常性,只有常引用可以引用常量

    double f=1.2;
    //int& g=f;//f是double,g是int,如果引用的话,引用改变,原值岂不是很尴尬
    const int& h=f;
}

引用做参数
1.【值传递】形参生成局部变量接受实参的值

void Swap(int a,int b)
{
    int tmp=a;
    a=b;
    b=tmp;
}

2.【指针传递】

void Swap(int* a,int* b)
{
    int tmp=*a;
    *a=*b;
    *b=tmp;
}

3.【引用传递】形参为引用类型,形参是实参的别名

void Swap(int& a,int& b)
{
    int tmp=a;
    a=b;
    b=tmp;
}
void Test3()
{
    int i =1;
    int j=2;
    cout<<"a "<<a<<endl;
    cout<<"b "<<b<<endl;
    Swap(a,b);
    cout<<"a "<<a<<endl;
    cout<<"b "<<b<<endl;
}

如果不希望在函数体内改变参数的值,可以使用常引用传参(const)
void func(const int& a);

传值做返回值,传引用作为返回值

int& Add(int a,int b)
{
    int sum=a+b;
    return sum;
}
int& ret =Add(1,2);

不要返回一个临时变量的引用,除了函数啥都不是啊
如果返回对象出了当前函数作用域依旧存在,那最好使用引用返回,更高效

引用其实是用指针实现的,存地址这样的方式实现的
引用和指针
1. 引用只能在定义时初始化一次,之后不能改变指向其他变量;指针变量的值可变
2. 引用必须指向有效的值;指针可以指空
3. sizeof指针和引用的意义不一样,sizeof引用得到所指向变量的大小;sizeof指针得到对象地址的大小
4. 指针 引用自增自减意义不一样
5. 引用比指针更安全,指针比引用灵活,也危险,指针所指地方释放之后最后置NULL,否则会成为野指针

如果有什么不对的地方,可以评论告诉我,望指导!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值