C语言-传值,传地址(指针),传引用区别和联系

不少编程老手对传值,传地址,传引用的区别搞的也不会很清楚,今天我就花一点时间再次介绍一下这些概念的本质。编程

    其实,不用分为三类,只有两类便可。传值和传引用。为何会出现传地址(即传指针)呢?本质就是你们一致对传值和传地址概念的理解错误致使,也是对指针的概念的理解错误致使。
函数

    指针:(简单补充一下)其实很简单,指针就是一个变量,若是非要说是一个特殊的变量也不为过,由于指针的初始化和解引用等不一样的操做方式而已。就内存的分布来讲,指针和一个变量在内存中存放是没有任何区别的,无非指针存放的是变量的地址,就是这么简单。spa

    定义:
指针

    传值:可能不少人都据说,传值无非就是实参拷贝传递给形参。这句话没有错,可是理解起来仍是有点抽象。一句话,传值就是把实参赋值给形参,赋值完毕后实参就和形参没有任何联系,对形参的修改就不会影响到实参。
对象

    传地址:为何说传地址也是一种传值呢?由于传地址是把实参地址的拷贝传递给形参。仍是一句话,传地址就是把实参的地址复制给形参。复制完毕后实参的地址和形参的地址没有任何联系,对实参形参地址的修改不会影响到实参, 可是对形参地址所指向对象的修改却直接反应在实参中,由于形参指向的对象就是形参的对象。
内存

    传引用:传引用本质没有任何实参的拷贝,一句话,就是让另一个变量也执行该实参。就是两个变量指向同一个对象。这是对形参的修改,必然反映到实参上。
io

    区别:效率

    (1):传递引用给函数与传递指针的效果是同样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,因此在被调函数中对形参变量的操做就是对其相应的目标对象(在主调函数中)的操做。变量

    (2):使用引用传递函数的参数,在内存中并无产生实参的副本,它是直接对实参操做;而使用通常变量传递函数的参数,当发生函数调用时,须要给形参分配存储单元,形参变量是实参变量的副本;若是传递的是对象,还将调用拷贝构造函数。所以,当参数传递的数据较大时,用引用比用通常变量传递参数的效率和所占空间都好。构造函数

    (3):使用指针做为函数的参数虽然也能达到与使用引用的效果,可是,在被调函数中一样要给形参分配存储单元,且须要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另外一方面,在主调函数的调用点处,必须用变量的地址做为实参。而引用更容易使用,更清晰。


本质: 传值和传指针都是传值方式,除了传引用以外

相关文章
相关标签/搜索