指针 指针的引用 指针的指针

本文详细解析了C++中指针与引用的区别:指针可以改变所指向的对象,而引用一旦初始化则不可更改;指针传递为值传递,引用传递则是对主调函数变量的直接操作。

  从概率上讲,指针本质是有变量地址的的一个变量,在逻辑上是一个独立的。包括其所指向的地址的改变和其指向的地址的中所存放数据的改变。

  而引用时一个别名,它在逻辑上并不独立,它存在依附性,所以引用必须初始化,(指针声明时候也最好初始化,但是不是必须,指针可以通过复制一个地址来更新其指向的地址空间。)而且引用在整个生命周期内不能被改变。

 在c++中,它们经常用于函数参数传递,然而传递引用与传递指针本质上是不同的。

 指针传递本质上是一个值传递的过程,它所传递的值是地址值。值在传递过程中被调函数的形参作为被调函数的局部变量处理(这就意味着,如果在被调函数中对传入的地址做了更新,将不影响调用函数中原指针的地址,更新的只是临时地址中的指向地址。)

 而引用传递过程中,被调函数的形参虽然作为局部参数在堆栈中开辟了内存空间,但是任何对于引用参数的处理都会以一种寻址的方式操作到主调函数中的相关的实参变量,而对于指针传递的变量的参数将不影响到主调函数的相关变量,如果想通过指针参数改变主调函数中的相关变量,那就得用指针的引用或者指向指针的指针。

 从编译的角度来看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名多对应的地址,指针变量在符号表上对应的地址为指针变量的地址值,而引用在符号表上对应的是地址值是引用对象的地址值,符号表生成后就不能改变,因此指针可以告便指向的对象,而引用不能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值