Показано с 1 по 10 из 35

Тема: Проверка на Null указателей

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #21
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Вот напишу я вам библиотеку, в которой одна из функций будет возвращать указатель (адрес) на буфер, и скажу, что в случае неудачи эта функция возвращает NULL (0). На этапе загрузки вы с этим ничего сделать не сможете. Вам придётся в своей программе проверять значение, возвращённое моей функцией, чтобы оно не оказалось равным нулю. Буквально IF ptr <> 0 THEN... Так?

    В Жаве в аналогичной ситуации вы бы написали if (xyz != null) и никак иначе, потому что там модель ссылочная, адреса скрыты от программиста, ссылки в чистом виде не являются для программиста числами, и следовательно, сравнивать их с нулём нельзя — из-за чего и введена литера null (не является типом и не имеет своего типа; это своеобразный нолик для проверки и инициализации ссылок любого типа). UPD: спеки на Жаву в п. 4.1 говорят, что null таки имеет свой тип, но этот тип не имеет имени. In practice, the programmer can ignore the null type and just pretend that <code class="literal" style="color: rgb(0, 0, 0); font-size: 10.1999998092651px; font-style: italic; line-height: 16.7999992370605px;">null</code> is merely a special literal that can be of any reference type.

    Но некоторые идут из страны весёлых языков Си/Си++. Особенно Си++. Ссылочная система там гарантирует, что объект будет валидным — null как в Жаве не требуется, и его нет. Но помимо неё есть ещё указательная система, и адреса под указателями имеют неявно числовой тип и могут быть какими угодно. До 2011 года полученные извне адреса сравнивали с нулём. Но для читаемости и чтобы не путать указатели с числами вместо нуля часто писали NULL (глобально определённая библиотечная константа, которая на самых первых этапах компиляции подменялась нулём). По той же причине люди пишут TRUE/FALSE вместо 0/1, как Валенок выше уже упомянул. А в 2011 стандартом на замену этому колхозу был введён литерал nullptr, который уже поддерживается на уровне компилятора как null в Жаве, но для указателей, а не для ссылок.

    И вот SKV спрашивал, есть ли что-то вроде NULL/nullptr из мира Си++ (или ещё откуда). Ответ отрицательный: указатели придётся сравнивать с нулём или определить для себя константу с именем NULL.
    Последний раз редактировалось Yegor; 24.08.2015 в 07:56.

Похожие темы

  1. применение указателей
    от Дмитрий Артюховский в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 09.02.2016, 18:07
  2. Использование указателей Pointer
    от Андрей Плеханов в разделе ПЛК3xx (архив)
    Ответов: 23
    Последнее сообщение: 24.07.2014, 20:58
  3. Ответов: 3
    Последнее сообщение: 10.04.2013, 18:48
  4. проверка на качество показаний
    от evgnik в разделе ПЛК1хх
    Ответов: 22
    Последнее сообщение: 14.11.2011, 08:05
  5. Получение списка/указателей на ФБ проекта
    от Аркадий в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 05.03.2008, 18:22

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •