看板 C_and_CPP 關於我們 聯絡資訊
我最近在實作 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
adrianshum:void ptr 可以指往 任何 ptr, 應該不代表 08/18 12:03
adrianshum:ptr to (void ptr) 可以指向 ptr to (any ptr) 吧 08/18 12:04
adrianshum:其實 method signature 照樣用 void * 應該就可以了 08/18 12:05
VictorTom:小弟還以為是因為C++對型別檢查比較嚴格....Orz 08/18 12:29