我正在尝试使用双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