美文网首页
关于引用和指针的一些转载加实验

关于引用和指针的一些转载加实验

作者: 荻庐夜雪 | 来源:发表于2019-10-23 08:45 被阅读0次

转载自论坛的一些观点:

传值:是把实参的值赋值给行参,那么对行参的修改,不会影响实参的值。

传地址:是传值的一种特殊方式,只是他传递的是地址,不是普通的如int;那么传地址以后,实参和行参都指向同一个对象。

传引用:真正的以地址的方式传递参数,传递以后,行参和实参都是同一个对象,只是他们名字不同而已,对行参的修改将影响实参的值。


觉得从函数调用的角度理解比较好:

传值:
函数参数压栈的是参数的副本。
任何的修改是在副本上作用,没有作用在原来的变量上。

传指针:
压栈的是指针变量的副本。
当你对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。

传引用:
压栈的是引用的副本。由于引用是指向某个变量的,对引用的操作其实就是对他指向的变量的操作。(作用和传指针一样,只是引用少了解指针的草纸)


函数参数传递机制的基本理论 :
  函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。
  值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
  引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。


仅讨论一下值传递和引用:
所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。
所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。

转载自https://blog.csdn.net/lalate/article/details/91562161


自己做了一个小实验验证了一下上面的观点:

int *p;
    int a = 1;
    int b;
    p = &a;
    b = *p;
    cout << &p << endl; //赋值前的地址
    cout << *p << endl;//赋值后的值
    cout << p << endl;//赋值后的地址
    cout << &a << endl;//验证是否地址一致
    cout << b << endl;//赋值后的值
    cout << &b << endl;//验证是否地址不一致

输出结果为:

00AFF9BC
1
00AFF9D8
00AFF9D8
1
00AFF9B8

引用就是个虚名,没有实际的空间占用。
而指针就是对象的地址,它要占用空间存储下这个指针的。指针和对象都是实际的存储在内存里的某一个地址下的东西。
所以,没有引用的指针,因为引用本身不是一块实际点内存,就没有地址可言。同理也没有引用的引用。
但是有指针的指针。因为指针本身也要存储在一个地址里的,这个地址就是指针的指针。
所以同样存在指针的引用,因为指针自己也是存储在一个地址里的,对它的引用就是这个地址的别名。从这个角度,指针的引用和普通对象的引用是一样的,都是虚名。

相关文章

  • 关于引用和指针的一些转载加实验

    转载自论坛的一些观点: 传值:是把实参的值赋值给行参,那么对行参的修改,不会影响实参的值。 传地址:是传值的一种特...

  • C++入门系列博客三 引用和指针

    C++ 引用和指针 作者:AceTan,转载请标明出处! 引用和指针对于C++来说很重要,是学习C++绕不过去的一...

  • 引用计数与ARC

    一、引用计数原理引用计数就是表示多少个指针指向这个对象,当新的指针指向该对象时引用计数加1,当指针不再指向该对象时...

  • 指针于引用的区别(转载)

    指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。 1...

  • go、java or c艹 引用的本质

    在底层,引用变量由指针按照指针常量的方式实现 即一个指针常量,和一些解引用等的封装;合到一起实现了指针这么一种形式...

  • 指针和引用

    指针和引用的区别: 主要是两点: 引用使用时必须非空即必须初始化为非空值,指针则初始化时可以为空; 引用初始化后不...

  • 指针和引用

    指针和引用 1. 引用和指针有什么区别? 引用是 C++ 中新增的变量类型,是对 C 的一个扩充。引用给变量起一个...

  • 引用和指针

    引用和指针 引用(左值引用) 引用为对象起了另外一个名字,引用必须初始化,引用会和被引用对象的值绑到一起(而不是拷...

  • 指针和引用

    本文来源于http://stackoverflow.com/questions/57483/what-are-th...

  • 指针和引用

    本质:引用是别名,指针是地址,具体的: 从现象上看,指针在运行时可改变其所指向的值 (所以要判断是否为空),而引用...

网友评论

      本文标题:关于引用和指针的一些转载加实验

      本文链接:https://www.haomeiwen.com/subject/vqppuctx.html