我正在嘗試使用雙void
指針,但我對使用情況有點困惑。 我有一個struct
包含一個void **
陣列。如何正確使用void **指針?
struct Thing{
void ** array;
};
struct Thing * c = malloc (sizeof(struct Thing));
c->array = malloc(10 * sizeof(void *));
所以如果我想不同的對象分配給每個指針,並嘗試檢索值
// Option 1
*(c->array + index) = (void *) some_object_ptr;
// Option 2
c->array[index] = (void *) some_object_ptr;
然後,我還有一個功能,讓(void *) item
指向每一個細胞,而不是some_object_ptr
。
如果我要找回它通過some_object_ptr
指向值,
應該怎麼做
function return type is 'void *' and takes argument 'void *'
// Option 3
return (void**) item
// Option 4
return *((void**)item)?
奇怪的是,當我使用數組的數組下標方法我不能使用選項4,只有選項3;當我使用*(c->array + index)
時,我只能使用opt.4。而不是opt.3。 ..
任何人都可以請告訴我這個嗎?如果我做出任何無效的假設,那麼請你糾正我?
你爲什麼用'無效*'工作?更糟糕的是,'void **'? – Kevin 2012-01-27 22:27:06
也許他需要它? – 2012-01-27 22:29:21
另外,選項3和4不一樣,3返回'void **',4返回'void *'。 '物品'究竟是什麼? – Kevin 2012-01-27 22:30:58