Неопределённые указатели — void * |
Предыдущая Содержание Следующая |
Значение любого указателя может быть присвоено переменной указателя с типом void * и наоборот, за исключением имеющих классификаторы const. Эти присвоения не изменяют значение указателя. Фактически, это отключает проверку типов в компиляторе:
int iv [] = { 1, 2, 3 }; int * ip = iv; ок, тот же тип void * vp = ip; ок, произвольный присваивается void * double * dp = vp; ок, void * присваивается произвольному
В качестве спецификации формата для записи и чтения значений указателей для printf() и (теоретически) для scanf() используется %p. Подходящим типом аргумента является void * и, следовательно, любой тип указателя:
void * vp; printf("%p\n", vp); выводит значение на экран scanf("%p", & vp); читает значение
Арифметические операции включающие в себя void * не допускаются:
void * p, ** pp; p + 1 ошибка pp + 1 ок, указатель на указатель
Эту ситуацию иллюстрирует следующая картинка:
|
Предыдущая Содержание Следующая |