c程序中的编译器错误:类型void上的间接寻址*

c程序中的编译器错误:类型void上的间接寻址*,c,compiler-errors,C,Compiler Errors,此简单程序将导致编译器错误,提示: void main() { void *v; int integer=2; int *i=&integer; v=i; printf("%d",(int*)*v); } 此错误的确切含义是什么?您不能取消对void(即void*)的指针的引用。它们指向保存未知数据的内存位置,因此编译器不知道如何访问/修改该内存 这个错误的意思正是它所说的。该错误由代码中使用的*v子表达式触发 C中的一元运算符*通常称为间接运算符或解引用运算符。在这种情况下,编译器告

此简单程序将导致编译器错误,提示:

void main()
{
void *v;
int integer=2;
int *i=&integer;
v=i;
printf("%d",(int*)*v);
}

此错误的确切含义是什么?

您不能取消对
void
(即
void*
)的指针的引用。它们指向保存未知数据的内存位置,因此编译器不知道如何访问/修改该内存

这个错误的意思正是它所说的。该错误由代码中使用的
*v
子表达式触发

C中的一元运算符
*
通常称为间接运算符或解引用运算符。在这种情况下,编译器告诉您,将一元
*
应用于
void*
类型的指针是非法的更改:

Compiler Error. We cannot apply indirection on type void*
为此:

printf("%d",(int*)*v);

请停止使用
void main()
。当然可以,但我最担心的是警告!只是要补充一点。编译器不知道什么是“void”类型,所以它不知道检索它们的热(与编译器要求整数为4字节,双精度为8字节等相反),因此您将得到错误。我知道这将解决问题,但我更感兴趣的是了解错误…无论如何,感谢您的评论。
printf("%d",*(int*)v);