看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《timlong (timlong)》之銘言: : void alloc_mem(int **p) : { : *p = (int *)malloc(sizeof(int)); : } : int main() : { : int *ptr=NULL; : alloc_mem(&ptr); : /*...*/ : } 在下也來分享一下: void alloc_mem(int *&p) ← 使用 call by reference { p = (int*)malloc(sizeof(int)); } int main() { int *ptr = NULL; alloc_mem(ptr); return 0; } 關於賦予函式參數值的方式, timlong 大使用的是 call by address,這在 Win32 API 也很常見。 用 call by address 和 call by reference 的差別, 前者是額外配置一個記憶體的指標指到傳入的參數, 後者則為直接傳入參數本身的記憶體位址, 在效能上佔有優勢且在coding上也比較直覺。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.44.9
Alexboo:推 養成良好的習慣 03/16 17:08
stonehomelaa:良好習慣?? C語言哪來的reference呀 03/16 17:49
stonehomelaa:而且老外的書沒看過有 call by address 一詞 03/16 17:53
stonehomelaa:聽說是台灣人自創的樣子 03/16 17:54
littleshan:傳 reference 效能和 pointer 一樣,並不會比較快 03/16 18:13
chrisdar: 傳指標的話 有的時候還要 *p 取值 03/16 18:28
Killercat:在32bit系統下,4byte以下的資料兩者效能是一樣的 03/16 18:30
Killercat:因為reference = pointer, 32-bit系統下是4bytes 03/16 18:30
Killercat:所以基本上pass pointer的話,傳ref不但沒意義,而且.. 03/16 18:31
Killercat:我不覺得&*很好閱讀 -_- 況且有時還有const問題 03/16 18:31
Killercat:說錯 4byte下兩者一樣, 4bytes以下ref還會慢一點 03/16 18:32
Killercat:當然4bytes以下的資料非常少見就是 03/16 18:32
stonehomelaa:他說的直覺是指alloc(ptr)和alloc(&ptr)相比吧 03/16 18:37
lungswu:私以為...這樣做很危險 03/16 21:11