Язык С в вопросах и ответах



             

Язык С в вопросах и ответах - сстр. 3


Стиль
        15. Операции с плавающей точкой
        16. Интерфейс с операционной системой
      17. Разное (Пребразование Fortran -> C , грамматики для    YACC и т.п.)


К сему прилагаются часто задаваемые вопросы и ответы на    них.


      1. Нулевые указатели

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

О:      Для каждого типа указателей существует (согласно определению языка)
      особое значение   - "нулевой указатель", которое отлично от всех других
        значений и не указывает на какой-либо объект или функцию. Таким
        образом, ни оператор &, ни успешный вызов malloc() никогда не
        приведут к появлению нулевого указателя. (malloc возвращает нулевой
        указатель, когда память выделить не удается, и это типичный пример
        использования нулевых указателей как особых величин, имеющих
        несколько иной смысл "память не выделена" или "теперь ни на что не
        указываю". )

        Нулевой указатель принципиально отличается от неинициализированного
        указателя.  Известно, что нулевой указатель не ссылается ни на какой
        объект; неинициализированный указатель может ссылаться на что угодно.
        См. также вопросы 3.1, 3.13, и 17.1.

        В приведенном выше определении уже упоминалось, что существует
        нулевой указатель для каждого типа указателя, и внутренние значения
        нулевых указателей разных типов могут отличаться. Хотя программистам
        не обязательно знать внутренние значения, компилятору всегда
        необходима информация о типе указателя, чтобы различить нулевые
        указатели, когда это нужно (см. ниже).

        Смотри:  K&R I Разд. 5.4 c. 97-8; K&R II Разд. 5.4 c. 102; H&S
        Разд. 5.3 c. 91; ANSI Разд. 3.2.2.3 c. 38.

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

О:      В языке С константа 0, когда она распознается как указатель,
        преобразуется компилятором в нулевой указатель.


Содержание  Назад  Вперед