Тип void
в целом означает, что информация о типе не указана.
Вы всегда должны помнить, что указатель передает две части информации: тип указанных данных (int
, double
, ...), который указывает, как их интерпретировать, и адрес данных, на которые он указывает, который указывает где можно получить фактическое значение указанных данных.
Информация о типе находится в типе указателя (double
*
, int
*
, ...), а адрес данных - это фактическое значение, содержащееся в указателе. Переменная.
Итак, указатель void
(void *
) - это указатель, который не указывает никакой информации о типе. Он сообщает вам, где находятся данные, но не говорит, как их интерпретировать. Вы знаете, что по этому адресу что-то есть, но вы не знаете, int
, double
или группа летающих коров. Чтобы действительно использовать такие данные, вы должны получить информацию о типе каким-либо другим способом (например, с помощью какого-либо другого магического параметра), привести этот указатель к обычному типу указателя и затем использовать его как обычно.
void *
часто используется в C для поддержки общего программирования; см., например, функцию библиотеки qsort
C .
Вместо этого указатель NULL
- это указатель, который ни на что не указывает. В этом случае информация о типе указателя в целом присутствует, но отсутствует адрес указанных данных. Конечно, возможно иметь void *
, то есть NULL
.
Быстрый пример (предположим, что v
объявлен как double v;
):
Type information present
+----------------------+----------------------+
| ✔ | ✘ |
+---+----------------------+----------------------+
p c | | | |
v o o | ✔ | double * ptr = &v; | void * ptr = &v; |
a i n | | | |
l n t +---+----------------------+----------------------+
i t e | | | |
d e n | ✘ | double * ptr = NULL; | void * ptr = NULL; |
d t | | | |
+---+----------------------+----------------------+
Общая информация: NULL
, по крайней мере, в текущем стандарте гарантированно равно 0.
В других областях языка void
всегда используется для обозначения отсутствия типа. Использование его в качестве возвращаемого значения (примечание: я сейчас говорю о void
, а не void *
) означает, что функция не возвращает никакого значения, а приведение выражения к void - это интересный способ отбросить значение (вы сигнализируете компилятору и другим программистам, что вы понимаете, что не используете определенное значение).
person
Matteo Italia
schedule
02.12.2010