简单快速的理解c++中的指针与引用,以及为什么经常要用引用传递来代替值传递和引用的本质(包含指针常量和常量指针)。

  首先要明确的是指针也是一个变量,会在内存中开辟出新的空间。

  而引用则是原变量的一个别名,跟原变量实质上是一个东西。

我们根据这张较为简陋的内存图来分析一下

需要注意的是&在不同地方表示的意义不同,在指针赋值时表示取变量地址,在引用中就表示给变量起别名。

int *p = &a; //表示的是a的地址由指针类型变量p来保存,通过*p解引用就能取到a的值

int q = *p; // q的值为10

int &b = a;// 给a起一个别名b,b和a表示的内容相同,此时打印b的值为10

int c = b; //b不用解引用直接就可以进行赋值,此时c的值为10

由于引用不会开辟新的空间,通常会用作形参节省空间

我们用值传递的方法写一个交换俩个变量的值的函数

void swap(int a, int b) {
    int temp = a;
    b = a;
    b = temp;
}

由于值传递是新创建变量进行交换不会对原变量上的值进行修改,所以达不到我们想要的交换的效果

这时我们就可以用引用传递

void swap(int& a, int& b) {
    int temp = a;
    b = a;
    b = temp;
}

引用传递传入实参后能直接在原变量上进行修改,就能达到俩个变量的值进行交换的效果。

我们知道指针大致可分为指针常量和常量指针;

指针常量:int * const p = &a 用 const 修饰 p,p是存放地址的,所以p存放的地址值也就是指针的指向不能改变,但是*p 也就是a的值是可以改变的

常量指针:int const* p = &a 用const 修饰*p,*p是变量a的值,所以*p的值不能修改,但是指针的指向可以改变

引用的本质:引用实际上是一个特殊的指针,我们叫指针常量

我们知道被const定义的变量就不能进行修改了,指针常量就是用const来修饰指针

 int& b = a; 相当于 int * const b = &b,并且赋值时编译器会自动进行解引用操作

int c = b; 相当于int c = *b.

有错漏的地方欢迎大家指出交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值