为什么你会在这段代码中使用一个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文字所在的地址。