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

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

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

push eax

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

1个回答

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

iamexe
iamexe 你没说到点上呀,其实我就是想问,在函数内是怎么访问引用对象的,如果是拷贝过来可以使用esp指针偏移来访问,但是引用不会压栈,通过什么来访问呢?通过上传的函数来访问?估计是有这种可能
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问