Странное значение указателя в C / C , выделенного из системного вызова

#c

#c

Вопрос:

Кто-нибудь может объяснить, почему этот код выводит ‘A’, а не его адрес в памяти?

 #include <iostream>`
#include <unistd.h>
#include <sys/mman.h>

using namespace std;

#define PAGESZ 0x1000

int main() {
    char *p = (char*) mmap(NULL, PAGESZ, PROT_READ | PROT_WRITE,
                           MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
    *p = 'A';
    cout << p << endl;
}
  

Комментарии:

1. Вы ожидаете char *str = "abc"; cout << str; напечатать адрес указателя str или строку abc ?

2. О .. я понимаю… Он обрабатывает его как строку в стиле C… Вот что я получаю за такое смешивание C и C . Спасибо!

3. Чтобы напечатать адрес, выполните cout << (void *)p . Это использует другую перегрузку operator<<() , которая печатает адрес, а не обрабатывает адрес как первый символ строки в стиле C.