打印数组元素内存对应C和C++,为什么不同的输出?

W3c*_*tor 4 c c++ memory memory-management

可能重复:
如何在使用std :: cout时模拟printf的%p格式?

我尝试在C和C++中打印出数组元素的内存地址.

在C:

char array[10];
int i;
for(i =0; i<10;i++){
    printf(" %p \n", &array[i]);
}
Run Code Online (Sandbox Code Playgroud)

我有足够的内存地址:0xbfbe3312,0xbfbe3313,0xbfbe3314,....

但是,如果我尝试在C++中做同样的事情:

char array[10];
for(int i =0; i<10;i++){
    std::cout<<&array[i]<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出:

P

ķ



它为什么不同?我应该cout在C++中使用不同的方式打印出内存地址吗?我该如何打印出内存地址?

Xeo*_*Xeo 8

将地址转换为void*打印前,在C++ operator<<ostream重载,(const) char*以便它认为它是一个c风格的字符串:

char array[10];
for(int i =0; i<10;i++){
    std::cout << static_cast<void*>(&array[i]) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

另见我的这个答案.