C++ 中的值传递、指针传递和引⽤传递

1、值传递

值传递,会将实参的值拷贝到被调函数的作用域中,产生一个局部变量,该局部变量的变化不会影响实参。

2、指针传递

指针传递,其本质上也是值传递,传递的值是一个地址。在被调函数的作用域中改变局部指针变量的值,是不会影响原实参指针的。但是局部指针变量可以进行解引用,对其引用对象进行修改。

3、引⽤传递

在引用传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参(本体)的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量(根据别名找到主调函数中的本体)。因此,被调函数对形参的任何操作都会影响主调函数中的实参变量。

从汇编层面上看, 指针传递和引用传递的行为是相同的。

从编译的⻆度来讲,程序在编译时分别将指针和引⽤添加到符号表上,符号表中记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,⽽引⽤在符号表上对应的地址值为引⽤对象的地址值(与实参名字不同,地址相同)。符号表⽣成之后就不会再改,因此指针可以改变其指向的对象(指针变量中的值可以改),⽽引⽤对象则不能修改。

posted @ 2022-07-28 17:43  mshentai  阅读(110)  评论(0编辑  收藏  举报