为什么你会在这段代码中使用一个void指针?

#include <iostream> using namespace std; int main() { char *pc; int *pi; double *pd; pc = (char *)10000; pi = (int *)10000; pd = (double *)10000; // 1) cout << "before pc = " << (void *)pc << " pi = " << pi << " pd = " << pd << endl; pc++; pi++; pd++; // 2) cout << "after increase pc = " << (void *)pc << " pi = " << pi << " pd = " << pd << endl; return 0; } 

在这个代码(1,2)中,为什么variablespc被转换为void指针?

我正在检查如果不打印variablespc则不会发生运行时错误。

因为char*当用cout << something打印时会尝试打印一个string( cout << "Hello, World" << endl;在本例中使用char * [在本例中是一个const char * ]来表示"Hello, World" )。

由于您不想在地址10000处打印string(它很可能会崩溃),因此代码需要执行某些操作以避免将指针用作string。

所以通过强制转换void*可以获得打印的实际地址,这是一般指针types的默认值,除了char *

否则,将会调用重载的operator << (std::ostream&, const char*) ,该operator << (std::ostream&, const char*)不打印地址,而是打印一个Cstring。

例如:

 std::cout << "Boo!"; 

打印Boo! ,而

 std::cout << (void*)"Boo!"; 

打印string文字所在的地址。