Консультация № 142033
23.08.2008, 07:12
0.00 руб.
0 1 1
на сайте http://faqs.org.ru/progr/c_cpp/cfaqrus2.htm нашел следующее:
2.19 Могу я использовать void ** , чтобы передать функции по ссылке
обобщенный указатель?

О: Стандартного решения не существует, поскольку в С нет общего типа
указатель-на-указатель. void * выступает в роли обобщенного
указателя только потому, что автоматически осуществляются
преобразования в ту и другую сторону, когда встречаются разные типы
указателей. Эти преобразования не могут быть выполнены (истинный
тип указателя неизвестен), если осуществляется попытка косвенной
адресации, когда void ** указывает на что-то отличное от void *.


Я не совсем понял предложение
Эти преобразования не могут быть выполнены (истинный
тип указателя неизвестен), если осуществляется попытка косвенной
адресации, когда void ** указывает на что-то отличное от void *.

Может вы мне разъясните?

Обсуждение

давно
Советник
165461
578
23.08.2008, 23:07
общий
это ответ
Здравствуйте, Warobushek!

Указатель - это, по существу, адрес объекта (или переменной), например int* - адрес, по которому хранится целое. Переменная типа void* - это адрес без указания типа ("указатель на нечто").

void** - это адрес адреса объекта любого типа. То есть, там, куда указывает void**, должен находиться адрес (т.е., переменная типа void*), а не что-то другое, что примерно и сказано в этом абзаце.
Форма ответа