void main() { void *v; int integer=2; int *i=&integer; v=i; printf("%d",(int*)*v); }
эта простая программа приведет к ошибке компилятора:
Compiler Error. We cannot apply indirection on type void*
что именно означает эта ошибка?
Ошибка означает именно то, что говорит. Ошибка вызывается подвыражением *v, используемым в вашем коде.
*v
Унарный оператор * в C часто называют косвенным оператором оператором или разыменованием оператором. В этом случае компилятор говорит вам, что нельзя применять унарный * к указателю типа void *.
*
void *
Вы не можете разыменовать указатели на void (т.е. void *). Они указывают на область памяти, содержащую неизвестные данные, поэтому компилятор не знает, как получить доступ / изменить эту память.
void
Изменение:
printf("%d",(int*)*v);
на это:
printf("%d",*(int*)v);