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 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决