Вопрос

Я изучаю программирование и пытаюсь лучше понять указатели. Одна из вещей, которую я узнал, это то, что вы можете установить для указателя значение NULL.Мой вопрос: в чем разница между этими двумя утверждениями?Когда каждый из них вернет true/false?

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

Спасибо!

Это было полезно?

Решение

Первый выполняет сравнение адреса переменной с нулевым значением, второй разыменовывает указатель, получает хранимое в нем значение и сравнивает его с нулевым.

Другие советы

Первый оператор относится к фактическому адресу, на который указывает указатель some_ptr.Если это NULL (значение, представленное определением NULL), это правда, в противном случае — нет.

Последнее утверждение относится к содержимому по адресу, на который указывает указатель.Итак, если у вас some_ptr указывает на целое число, и это целое число совпадает с вашим определением null, второе условие оценивается как true.

Во-первых, вы сравниваете сам указатель с NULL, что кажется желательным.

Во-вторых, вы сначала разыменовываете указатель, чтобы получить значение, которое затем сравнивается с NULL, как если бы вы сравнивали целое число с 0.на основе имени вашей переменной.

Первый говорит:
Является какой-то_ptr НУЛЕВОЙ?

Второй говорит:
Является на что указывает some_ptr НУЛЕВОЙ?

Например:интервал* х;Здесь, если вы хотите проверить, указывает ли x на NULL, мы используем первый оператор.С тем же int* x, если вы используете второй оператор, вы пытаетесь разыменовать указатель и проверить значение, на которое указывает x.Поскольку NULL равен 0 в C, C++ проверяет значение 0, на которое указывает x.

РЕДАКТИРОВАТЬ:Также и во втором операторе, если x указывает на NULL, то использование указателя NULL приводит к отключению ядра в UNIX.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top