Re: [問題] malloc問題
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2009/03/16 20:15)推噓1(1推 0噓 2→)留言3則, 1人參與討論串5/6 (看更多)
推
03/16 18:13,
03/16 18:13
推
03/16 18:28,
03/16 18:28
傳 reference 本質上還是傳 pointer 呀
只是 dereference 的時候 compiler 幫你做掉了
直接來看 assembly 就知道了
#include <cstdlib>
void alloc_mem(int** p)
{
*p = (int*)malloc(sizeof(int));
}
void alloc_mem(int*& p)
{
p = (int*)malloc(sizeof(int));
}
使用 gcc 編出的結果:
_Z9alloc_memRPi: ; alloc_mem(int*&)
.LFB14:
pushq %rbx
.LCFI0:
movq %rdi, %rbx
movl $4, %edi
call malloc
movq %rax, (%rbx)
popq %rbx
ret
...
_Z9alloc_memPPi: ; alloc_mem(int**)
.LFB13:
pushq %rbx
.LCFI1:
movq %rdi, %rbx
movl $4, %edi
call malloc
movq %rax, (%rbx)
popq %rbx
ret
兩邊的 assembly 完全相同。
推
03/16 18:30,
03/16 18:30
→
03/16 18:30,
03/16 18:30
→
03/16 18:31,
03/16 18:31
→
03/16 18:31,
03/16 18:31
→
03/16 18:32,
03/16 18:32
→
03/16 18:32,
03/16 18:32
你好像誤會什麼了
他是要去改變引數的內容
所以要嘛傳 reference 要嘛傳 pointer
而這種情況下兩者做的事是一樣的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.146.106
推
03/16 22:52, , 1F
03/16 22:52, 1F
→
03/16 22:53, , 2F
03/16 22:53, 2F
→
03/16 22:54, , 3F
03/16 22:54, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章