[問題] void* 的問題

看板C_and_CPP (C/C++)作者 (大豬小豬肉一斤)時間16年前 (2009/08/18 11:57), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
我最近在實作 Link List,遇到一個奇怪的問題, 就是void*不是可以接住任意型態的指標嗎? 我寫一個function,舉例說: void addEvent(LIST* pList, void* pNewData); (內容略) 然後在main,我先寫好pNewData,像這樣: EventContent* pNewData = (EventContent*)malloc(sizeof(EventContent)); (pNewData->.......內容略) 爾後呼叫 addEvent(pList, pNewData); Compiler完全沒問題,可以過。 不過一樣的情形我寫一個Traverse 的function: void traverse(LIST*, int, void**); (內容略) 呼叫traverse(pList, 0, &pNewData); Compiler卻說 「無法將參數 從 'EventContent **' 轉換成 'void **'」 我必須多加上(void**)在&pNewData前才能過, 變像這樣: traverse(pList, 0, (void**)&pNewData); 為什麼會這樣呢? 又在哪些情況要自己加上(void*)型態轉換呢? 謝謝各位先進解答! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.144.18

08/18 12:03, , 1F
void ptr 可以指往 任何 ptr, 應該不代表
08/18 12:03, 1F

08/18 12:04, , 2F
ptr to (void ptr) 可以指向 ptr to (any ptr) 吧
08/18 12:04, 2F

08/18 12:05, , 3F
其實 method signature 照樣用 void * 應該就可以了
08/18 12:05, 3F

08/18 12:29, , 4F
小弟還以為是因為C++對型別檢查比較嚴格....Orz
08/18 12:29, 4F
文章代碼(AID): #1AYYQy2e (C_and_CPP)
文章代碼(AID): #1AYYQy2e (C_and_CPP)