在Visual Studio 2012中,我正在搞乱指针,我意识到这个程序一直在崩溃:
#include <iostream>
using std::cout;
using std::endl;
int main ()
{
const char* pointer = nullptr;
cout << "This is the value of pointer " << pointer << "." << endl;
return 0;
}
我的意图是设置pointer
到null
,然后打印地址。即使程序编译,它也会在运行时崩溃。有人可以解释发生了什么吗?
另外,pointer
和*pointer
答案 0 :(得分:7)
您使用的const char*
在std::cout
的{{1}}中使用时会被解释为字符串。
将其强制转换为operator <<
以查看指针的值(它包含的地址):
void*
或者如果你想变得迂腐:
cout << "This the value of pointer " << (void*)pointer << "." << endl;
答案 1 :(得分:1)
虽然你可以像我们已经建议的那样cout << "Pointer is " << (void*)pointer << ".\n";
我觉得在这种情况下,做这件事的“C方式”更漂亮(没有强制转换)且更具可读性:printf("Pointer is %p\n",pointer);