Почему C ++ не печатает адрес памяти символа, а печатает 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;
}

Выход:

Адрес: 0x28ac67

Адрес б: 0x28ac66

Адрес c: 0x28ac60

Адрес d: 0x28ac5c

Адрес электронной почты:

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

Спасибо.

12

Решение

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

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

Другие решения

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

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

Проверьте этот ранее заданный вопрос: Почему адрес данных char не отображается?

Кроме того, если вы используете printf("Address of e: %p \n", &e); это тоже сработает.

2
По вопросам рекламы [email protected]