Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Да, используйте поразрядное ИЛИ ( |
) для установки нескольких флагов:
ColorType pinkColor = kWhite | kRed;
Затем используйте поразрядное И ( &
), чтобы проверить, установлен ли флаг установлено:
if ( pinkColor & kRed )
{
// do something
}
Результат &
имеет какой-либо установленный бит, только если один и тот же бит установлен в обоих операндах . Поскольку единственный бит в kRed
- это бит 1, результатом будет 0, если для другого операнда также не установлен этот бит.
Если вам нужно узнать, установлен ли конкретный флаг как BOOL
, а не просто сразу проверить его в условии if
, сравните результат побитового И с проверенным бит:
BOOL hasRed = ((pinkColor & kRed) == kRed);