Бьерн Страуструп - Язык программирования С++. Главы 2-4 - Тип void
ОГЛАВЛЕНИЕ
Страница 12 из 69
2.3.4 Тип void
Тип void синтаксически эквивалентен основным типам, но использовать его можно только в производном типе. Объектов типа void не существует. С его помощью задаются указатели на объекты неизвестного типа или функции, невозвращающие значение.void f(); // f не возвращает значенияУказатель произвольного типа можно присваивать переменной типа void*. На первый взгляд этому трудно найти применение, поскольку для void*
void* pv; // указатель на объект неизвестного типа
недопустимо косвенное обращение (разыменование). Однако, именно на этом ограничении основывается использование типа void*. Он приписывается параметрам функций, которые не должны знать истинного типа этих параметров. Тип void* имеют также бестиповые объекты, возвращаемые функциями. Для использования таких объектов нужно выполнить явную операцию преобразования типа. Такие функции обычно находятся на самых нижних уровнях системы, которые управляют аппаратными ресурсами. Приведем пример:
void* malloc(unsigned size);Обозначение: (тип) выражение - используется для задания операции преобразования выражения к типу, поэтому перед присваиванием
void free(void*);
void f() // распределение памяти в стиле Си
{
int* pi = (int*)malloc(10*sizeof(int));
char* pc = (char*)malloc(10);
//...
free(pi);
free(pc);
}
pi тип void*, возвращаемый в первом вызове malloc(), преобразуется в тип int. Пример записан в архаичном стиле; лучший стиль управления размещением в свободной памяти показан в $$3.2.6.