C++引用的知识点概括

 

什么是引用

在C++语法上来看,引用是给变量起了个别名,不占用空间

引用的格式

类型& 引用变量名 =引用实体

引用的注意事项

1.引用定义的同时必须进行初始化

引用是给变量起别名,那前提肯定得有实体变量

2.引用不能初始化为空

引用是给变量起别名,给空起了个别名没意义

3.不可以改变引用关系

这与引用的实质有关系

引用的实质是一个指针常量,是一个指向方向固定的指针,所有它不能更改指向,也就不能改变引用关系

int& b=a;
int* const b=&a;

image-20231127111656885

#include <iostream>
​
using namespace std;
​
int main() {
    int a = 5;
    int& b3;//引用必须初始化
    int& b2 = NULL;//引用不能初始化为空
    int& b1 = a;
    int* const b1 = &a;//本质 -->指针常量(指向不能改变,但是指向内存空间里面的内容可以改变)n
    cout << b1 << " " << *b2;
    return 0;
}

预备知识

左值

可寻址、有变量名的值

右值

不可寻址、一般没有变量名的值

左值引用

int a=10;//a为左值 有变量名 可寻址(&x)可以找到地址
int& b=a;

右值引用

#include <iostream>
using namespace std;
int main() {
    int&& c = 10;//10为右值 不可寻址(&10错误) 
    return 0;
}

万能引用

const 类型 引用名 =引用实体

int main() {
    const int a = 10;
    const int& b = a;
    const int& c = 10;
    return 0;
}

引用的应用

做函数的形参

参数的传递方式有三种

值传递

址传递

引用传递

#include <iostream>
​
using namespace std;
void text1(int a,int b) {
    int t;
    t = a;
    a = b;
    b = t;
}//值传递
void text2(int*a,int*b) {
    assert(a);
    assert(b);
    int t;
    t = *a;
    *a = *b;
    *b = t;
}//址传递
void text3(int& a,int& b) {//int& a=a; int& b=b; 
    int t;
    t = a;
    a = b;
    b = t;
}//引用传递
void text4(int* const a,int* const b) {//int* const a=&a; int* const b=&b;
    int t;
    t = *a;
    *a = *b;
    *b = t;
}
int main() {//引用做函数的形参 可以修改传递过来实参变量的值
    int a = 5;
    int b = 10;
    text1(a, b);//值传递
    text2(&a,&b);//址传递
    text3(a,b);//引用传递
    text4(&a,&b);
    return 0;
}

优点

指针要判空的,但是引用不用 可以避免很多麻烦

引用做函数的返回值

本人没太听懂。。。。。。

引用与指针的区别

1.引用必须进行初始化,但是指针可以不初始化,为野指针

2.引用不用初始化为空,但是指针可以初始化为空,为空指针

3.引用与变量的关系不能改变,但是指针的指向确可以改变

4.引用所占的空间大小为 类型大小所对应的字节,而指针4/8Byte

#include <iostream>
using namespace std;
int main() {
    int a = 10;
    int& b = a;
    int* c = &a;
    cout<<"引用的大小:" << sizeof(b)<<endl<<"指针变量的大小:"<<sizeof(c)<<endl;
    return 0;
}

image-20231127113815831

5.没有多级引用,但是有多级指针,二级三级指针

6.引用的++是指别名所在的那段空间数据的++,而指针的++是指向的移动

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值