void *
может ссылаться на адрес любого типа. Вы можете прочитать его как: «указатель на что-то в памяти». Таким образом, это означает, что он может указывать на целое число, строку, объект, ... все. Некоторые примеры:
void *anyObject;
int a = 1;
float b = 2;
char *c = "somestring";
function aFunction(int a)
{
...
}
anyObject = &a;
anyObject = &b;
anyObject = &c;
anyObject = &aFunction;
Это все действительные задания.
Чтобы вернуться к вашему вопросу: a void **
является указателем на указатель на void; на правильном английском языке: он указывает на место в памяти, где хранится значение void *
. Продолжая из приведенного выше примера:
void **p;
p = &anyObject;
В общем, void *
опасны, потому что они не типобезопасны. Чтобы использовать их, вы ДОЛЖНЫ использовать их для известного типа. И компилятор не будет жаловаться, если вы примените его к чему-то незаконному.
Хорошо, как вы его используете? Ну, на это трудно ответить, потому что мы не можем извлечь из декларации, какие типы ожидаются.Кроме того, возможно, что эти функции выделяют память внутри функции и возвращают ее внутри параметра. Но общий принцип: возьмите адрес (&) «указатель на что-то» и передайте его функции.
int a = 0;
int *pa = &a;
functionName(&pa);
Указатель на указатель пустоты? – jrok
Возвращает указатель на указатель на void. –
Да, но как я могу использовать его – Engine