我试图做一个文件级或全局范围的数组,其大小在运行时确定。像this one各种制品建议此图案用于这种动态数组:当指针被声明为一个类型时,它如何解除引用'void *'?
static MISCTYPE *handles;
static int nthreads;
int main(int argc, char **argv) {
// nthreads set from from argv
handles = malloc(nthreads * sizeof(MISCTYPE));
for(i = 0; i < nthreads; i++) {
handles[i] = miscfunction();
...
free(handles);
return 0;
}
int otherfunction(...) {
for(i = 0; i < nthreads; i++) {
handles[i] = miscfunction();
...
}
然而,无处不在我使用指针等的阵列(即handles[i]
)编译器说warning: dereferencing ‘void *’ pointer
然后error: invalid use of void expression
。
但它不是一个无效的指针!它肯定有一个类型(这种伪代码中的MISCTYPE),并将其重新转换为相同类型不会阻止错误。我没有通过它作为void *
或类似的东西。
这是怎么回事?更重要的是,我能做些什么呢?
好吧,显然'MISCTYPE'只是'void'的另一个名字。 MISCTYPE定义的方式和位置在哪里? – AnT
@Olaf:与C++不同?当涉及到typedef名称的一般状态时,我不知道C和C++之间有什么区别。在C和C++中,typedef名称只是现有类型的别名,而不是新类型。 – AnT
啊哈!这就是我没有挖掘到头文件!果然,它被定义为'typedef void MISCTYPE'。现在要弄清楚这是如何工作的... – ewall