空指针用法

Void Pointer Usage

#include <iostream>

int main()
{
    char *p = new char[1024];  
    std::cin >> p; 

    char q = *p;
    
    std::cout << "&q = " << (void*)&q << '\n';
    
    return 0;
}


我的问题是在这种情况下 (void*) 的含义是什么以及它为什么输出 q 的地址但是如果这个片段看起来像这样:

std::cout << "&q = " << &q << '\n';

它输出输入的字符和乱码,如下所示: aó√ä²$↔4 我输入 a 作为字符的地方。 (void*) 的用法是否仅适用于字符,或者当我想输出 q 的地址时我必须使用它让我们说它是一个 int 还是一个字符串。

谢谢

std::ostream 对象(其中 std::cout 是示例之一)的插入运算符 (<<) 具有针对 char*/[=14= 的特定重载] 指针,它将它们视为 C 风格的空终止字符串(其中 &q 显然不是)。

对于所有其他指针(包括 void* 指针),使用不同的重载,即只打印指针值的重载。