作者kkroy (大豬小豬肉一斤)
看板C_and_CPP
標題[問題] void* 表任意型態的指標...
時間Tue Aug 18 11:57:47 2009
我最近在實作 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