2014-03-18 4 views
4

Когда что-то отлито для void, тогда значение становится NULL. Однако почему void * указывает на любой тип данных? Не должен ли бесполезный указатель быть бесполезным?Почему указатель void указывает на что-либо?

+4

* Когда что-то отбрасывается в пустоту, значение становится NULL. * Требуется подтверждение/цитата ;-) –

+0

Указатель 'void' далеко не бесполезен. В отличие от «типизированных» указателей, он позволяет программисту законно решать, на что он указывает. Однако легитимность этого, конечно, полностью зависит от программиста. –

+0

приводит к изменению значений, как они интерпретируются в этом контексте ... он может вызывать инструкцию о значении переменной, чтобы изменить ее на двойную, например, но исходное значение не будет изменено. –

ответ

6

Пустоты указатель является указателем на что угодно. Это общий указатель, который не имеет определенного типа. Он также может иметь значение NULL, и в этом случае он не указывает ни на что. Чтобы использовать указатель void, вы должны следить за тем, на что он на самом деле указывает, и когда вы собираетесь его использовать, вы должны применить его к соответствующему типу.

Они могут быть опасными, потому что если вы примените его к неправильному типу, это приведет к неопределенному поведению во время выполнения.

3

Когда что-то отлито для void, значение становится NULL.

Неверно. Ничего не происходит с указанными данными.

Не должен ли указатель на пустоту быть бесполезным?

Пустота указатель ближе всего C имеет к «общему типу» и очень полезно тем, что позволяет таким вещам, как несколько общих функции, несколько общих контейнеры и т.д.

+1

+1 для "несколько". :) –

2

void * - общий указатель на объект. Обратите внимание, что нет указателя общей функции.

Вы можете преобразовать любое значение указателя объекта в void * и обратно без потери стоимости.

Смежные вопросы