2014-12-22 2 views
1

Код:Оператор логического на указатель

struct person *p = NULL; 
printf("%d, %d\n", !p, !!p); 

В коде выше ! оператор работает на указателе, я знаю ! работает с int, но то, что происходит, когда он работает с pointer?

Является ли указатель обработанным как int в природе, или ! сделать преобразование типа?


Я нашел ссылку C99, упомянутую в ответе здесь: www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

ответ

3

От c99 стандарта, глава 6.5.3.3, пункт 1

Операнда одноместный + или - оператор должен имеют арифметический тип; оператора ~ целочисленный тип; из ! оператор, скалярный тип.

и из 6.2.5, пункт 21,

Арифметические типы и типы указателей вместе называются скалярными типами.

Таким образом, можно использовать тип pointer непосредственно у унарного оператора !. Оценку ! оценивают нормально.

Может быть достойным упомянуть, в случае использования pointer, NULL значение является Ложные любое значение, отличное NULL считается Правда.

+0

Хороший ответ, кстати, я проверил документ c99 и обнаружил, что chp должен быть «6.5.3.3 Унарные арифметические операторы» –

+0

@EricWang Очевидная опечатка. :-) Спасибо за указание. –

0

Независимо от того, что указатель является просто адресом чего-то, то есть номера. Так '!' оператор тоже будет играть с указателем.

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