Подтвердить что ты не робот

Почему С++ не печатает адрес памяти char, но будет печатать int или bool?

Возможный дубликат:
Почему адрес char не отображается?

Вот код и вывод:

int main(int argc, char** argv) {

    bool a;
    bool b;

    cout<<"Address of a:"<<&a<<endl;
    cout<<"Address of b:"<<&b<<endl;

    int c;
    int d;

    cout<<"Address of c:"<<&c<<endl;
    cout<<"Address of d:"<<&d<<endl;

    char e;    
    cout<<"Address of e:"<<&e<<endl;

    return 0;
}

Выход:

Адрес a: 0x28ac67

Адрес b: 0x28ac66

Адрес c: 0x28ac60

Адрес d: 0x28ac5c

Адрес e:

Мой вопрос: Где находится адрес памяти char? И почему он не печатается?

Спасибо.

4b9b3361

Ответ 1

Я подозреваю, что версия ostream::operator<< с перегруженной версией char * ожидает строку C с нулевым завершением - и вы передаете ей только адрес одного символа, так что у вас есть поведение undefined, Вы должны указать адрес void *, чтобы он печатал то, что вы ожидаете:

cout<<"Address of e:"<< static_cast<void *>(&e) <<endl;

Ответ 2

Строки в C/С++ могут быть представлены char*, того же типа, что и &e. Поэтому компилятор считает, что вы пытаетесь напечатать строку. Если вы хотите распечатать адрес, вы можете использовать его для void*.

std::cout << static_cast<void *>(&e) << std::endl;