iamexe 2015-12-02 16:11 采纳率: 0%
浏览 1828

c/c++ 函数调用中形参为指针或者引用对栈操作问题

问题引出:
当我们的函数参数为普通变量或指针时,我们在调用过程中会拷贝一个副本,而当形参为引用时不会拷贝一个副本。
当形参为普通变量时,会拷贝一个变量备份,当为指针时会拷贝一个指针备份,指针指向的内容不会拷贝

问题来了:
查看使用指针和使用引用的方式调用的函数的汇编代码,会发现在汇编代码层面实现方式是一模一样的,都是:
lea eax,[i](假设i是整形变量)

push eax

而使用值传递方式是:
mov eax,dword ptr [i] (假设i是整形变量)
push eax
-----但是为什么使用指针传递需要拷贝一个指针的备份(4个字节),而使用引用不会产生拷贝。。

  • 写回答

1条回答

  • threenewbee 2015-12-02 16:19
    关注

    其实指针不指针的都一样,你把指针理解为一个整数罢了。对于指针本身,它是传拷贝,对于指针指向的对象来说,它没有拷贝。
    指针也可以引用,当指针作为引用的时候,形参改变了指针,实参指针也跟着变(比如指向另一个对象)。

    评论

报告相同问题?

悬赏问题

  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题