Возможный дубликат:
Почему адрес данных 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
Адрес электронной почты:
Мой вопрос:
Где адрес памяти символа? И почему это не напечатано?
Спасибо.
Я подозреваю, что перегруженchar *
версия ostream::operator<<
ожидает C-строку с NUL-окончанием — и вы передаете ей только адрес одного символа, так что у вас есть неопределенное поведение. Вы должны привести адрес к void *
чтобы он напечатал то, что вы ожидаете:
cout<<"Address of e:"<< static_cast<void *>(&e) <<endl;
Строки в C / C ++ могут быть представлены как char*
того же типа, что и &e
, Таким образом, компилятор думает, что вы пытаетесь напечатать строку. Если вы хотите распечатать адрес, вы можете привести к void*
,
std::cout << static_cast<void *>(&e) << std::endl;
Проверьте этот ранее заданный вопрос: Почему адрес данных char не отображается?
Кроме того, если вы используете printf("Address of e: %p \n", &e);
это тоже сработает.