空指针用法
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*
指针),使用不同的重载,即只打印指针值的重载。
#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*
指针),使用不同的重载,即只打印指针值的重载。