2010-02-08 2 views
4

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

if (some_ptr == NULL) 

if (*some_ptr == NULL) 

Спасибо!

ответ

9

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

+0

Адрес какой переменной? Никакая переменная никогда не имеет нулевого адреса. –

3

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

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

1

Первый - это сравнение самого указателя с NULL, что кажется желательным.

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

0

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

EDIT: Также со вторым утверждением, если x указывает на NULL, то отсрочка указателя NULL приводит к отказу ядра в UNIX.

1

Первый говорит:
some_ptr NULL?

Второй говорит:
ли независимо some_ptr указывает на NULL?

 Смежные вопросы

  • Нет связанных вопросов^_^