В одной из моих программ я получаю сообщение об ошибке
invalid conversion from 'void* (*)()' to 'void*' [-fpermissive]
Я пытаюсь понять разницу между этими двумя типами данных. Это очень сбивает с толку.
Что я думаю, что эти типы данных:
void* (*)()
Так что этот тип данных является указателем на пустоту (void*
), которая также имеет другой указатель ((*)
), и по какой-то странной причине он содержит пустые скобки. Итак, я думаю, что память для этого типа данных выглядит так: |--void address--|--pointer of unknown type--|--something denoting no arguments--|
, тогда есть void*
. Это кажется простым и представляет только адрес функции. Модель памяти должна быть такой простой, как |--void address--|
.
Почему это так странно, что функция, которая выдает ошибку, выглядит следующим образом.
void callFunction(void *voidThing){
void *testVariable = voidThing;
}
И, насколько мне известно, это создает testVariable типа указателя, и этот указатель на пустоту. Эта функция также принимает параметр указателя типа, и этот указатель также является пустым.
Почему компилятор выдает ошибку, даже если локальная переменная имеет тот же тип параметра? В чем разница между переменными с точки зрения объема памяти этих двух?