Почему можно сравнивать указатель с '\ 0'? (но не «A»)

Я обнаружил ошибку в своем коде, когда сравнил указатель с '\ 0'.

Интересно, почему компилятор не предупредил меня об этой ошибке, я попробовал следующее.

#include <cassert>

struct Foo
{
    char bar[5];
};

int main()
{
    Foo f;
    Foo* p = &f;
    p->bar[0] = '\0';
    assert(p->bar == '\0');    // #1. I forgot [] Now, comparing pointer with NULL and fails.
    assert(p->bar == 'A');     // #2. error: ISO C++ forbids comparison between pointer and integer
    assert(p->bar[0] == '\0'); // #3. What I intended, PASSES
    return 0;
}

Что такого особенного в '\ 0', которое делает # 1 законным, а # 2 незаконным?

Пожалуйста, добавьте ссылку или цитату к вашему ответу.

5
задан Eddy Pronk 22 December 2011 в 09:31
поделиться