От составителя.

Эта глава обсуждает внутреннюю реализацию нулевых указателей. Для большинства, наверное, она имеет лишь академический характер, так сказать, для расширения кругозора (поскольку на популярных платформах NULL — это 0). Тем не менее, если вы натолкнулись на "странности" с нулевыми указателями — прочтите.

Здесь, естественно, не освещены вопросы абстрактных методов (синтаксис, да и смысл которых также использует нулевой указатель: virtual void ToDo() = 0; Это — особый повод для разбирательств, отчасти освещенный в вопросах 1.1
Автор: Кодт
Дата: 16.01.03
, 1.10
Автор: Кодт
Дата: 16.01.03
, 1.11
Автор: Кодт
Дата: 16.01.03
.



Итак, представьте себе разговор немного паникующего новичка и спокойного "гуру"

ВОПРОСЫ

1.1. Расскажите все-таки о пресловутых нулевых указателях.

1.2. Как "получить" нулевой указатель в программе?

1.3. Что такое NULL и как он определен с помощью #define?

1.4. Как #define должен определять NULL на машинах, использующих ненулевой двоичный код для внутреннего представления нулевого указателя?

1.5. Можно ли передавать функциям NULL как ((char*)0) без преобразования типа?

1.6. Я использую макрос #define Nullptr(type) (type *)0 ...

1.7. Корректно ли использовать сокращенный условный оператор if(p) для проверки того, что указатель ненулевой? А что если внутреннее представление для нулевых указателей отлично от нуля?

1.8. Если "NULL" и "0" эквивалентны, то какую форму из двух использовать?

1.9. Но не лучше ли будет использовать NULL (вместо 0) в случае, когда значение NULL изменяется, быть может, на компьютере с ненулевым внутренним представлением нулевых указателей?

1.10. Я в растерянности. Гарантируется, что NULL равен 0, а нулевой указатель нет?

1.11. Почему так много путаницы связано с нулевыми указателями? Почему так часто возникают вопросы?

1.12. Я все еще в замешательстве. Мне так и не понятна возня с нулевыми указателями.

1.13. Учитывая всю эту путаницу, связанную с нулевыми указателями, не лучше ли просто потребовать, чтобы их внутреннее представление было нулевым?

1.14. Ну а если честно, на какой-нибудь реальной машине используются ненулевые внутренние представления нулевых указателей или разные представления для указателей разных типов?

1.15. Что означает ошибка во время исполнения "null pointer assignment" (запись по нулевому адресу). Как мне ее отследить?

Поехали! >>
Автор: Кодт
Дата: 16.01.03
Автор: Кодт    Оценить