Ответ 1
Нулевые указатели
Integer константный литерал 0 имеет разные значения в зависимости от контекста, в котором он использовался. Во всех случаях она по-прежнему является целочисленной константой со значением 0, она описывается по-разному.
Если указатель сравнивается с константным литералом 0, то это проверка, чтобы увидеть, является ли указатель нулевым указателем. Затем этот 0 называется константой нулевого указателя. Стандарт C определяет, что 0, переданный в тип void *, является как нулевым указателем, так и константой нулевого указателя.
Кроме того, чтобы облегчить чтение, макрос NULL предоставляется в файле заголовка stddef.h
.
Итак, вот несколько правильных способов проверки нулевого указателя:
if (pointer == NULL)
NULL
определяется как сравнимый с нулевым указателем. Реализация определяется, каково фактическое определение NULL, если оно является допустимой константой нулевого указателя.
if (pointer == 0)
0 - другое представление константы нулевого указателя.
Нулевые символы
'\0'
определяется как нулевой символ - это символ со всеми битами, установленными в ноль. Это не имеет никакого отношения к указателям. Однако вы можете увидеть что-то похожее на этот код:
if (!*string_pointer)
проверяет, указывает ли указатель строки нулевой символ
if (*string_pointer)
проверяет, указывает ли указатель строки на ненулевой символ.
Итак, мой вопрос: это ошибка или особый случай? Не должно ли быть (* c == '\ 0') там?
В заявлении в вашем коде if (c == '\0')
проверяется, равен ли сам указатель 0. То есть он проверяет, что c является указателем Null.
Но я думаю, что это ошибка, потому что оператор, проверяющий, является ли c указателем NULL
, после доступа к значению, хранящемуся в c. Я думаю, что программа собирается найти символ ]
. Если он обнаружил символ ]
до нулевого символа, то он не возвращает -1.
Итак, исправленное утверждение должно быть -
if (*c == '\0')
{
return -1; // It didn't found the '[' character!
}