4

在 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;
}

我的意图是将 a 设置pointernullptr,然后打印地址。即使程序可以编译,它也会在运行时崩溃。有人可以解释发生了什么吗?

pointer另外,和有什么区别*pointer

4

2 回答 2

8

您使用的 a const char*which 在std::cout's中使用时operator <<,被解释为字符串。

将其转换void*为查看指针的值(它包含的地址):

cout << "This the value of pointer   " << (void*)pointer << "." << endl;

或者如果你想学究气:

cout << "This the value of pointer   " << static_cast<void*>(pointer) << "." << endl;

活生生的例子

于 2013-06-04T08:05:30.453 回答
1

尽管您可以cout << "Pointer is " << (void*)pointer << ".\n";按照已经建议的方式进行操作,但我认为在这种情况下,执行此操作的“C 方式”更漂亮(无强制转换)且更具可读性:printf("Pointer is %p\n",pointer);

于 2013-06-04T08:11:48.343 回答