为什么只有char *是<bad ptr =“”>,而不是其他数据类型?

时间:2015-05-26 07:37:21

标签: c++ visual-studio pointers

我正在学习C ++中的指针。初始化指针时,例如,

double* pvalue1 = nullptr;//okay
char* pvalue2 = nullptr;  //only this says, "0x00000000 <Bad Ptr>" (in the watch window of Visual C++ 2010)
int* pvalue3 = nullptr;   //okay

为什么只有char类型指针给出Bad Ptr而其他指针类型没有? enter image description here

我现在不关心指向的价值观。我没有取消引用它们(这就是为什么上面有这些错误)。我只是看着这三个指针的观察窗口。

2 个答案:

答案 0 :(得分:21)

对于大多数指针类型,Visual Studio中的Watch窗口显示指针的值(它指向的地址),并允许您通过展开 + 来访问指向的值图标。因此,对于空指针,让我们说int,它只会显示null0x00000000或类似的东西。

char*的处理方式不同。这里,Watch根本不显示指针值,而是直接将指向的数据解释为NUL - 终止的字符串并打印出来。这当然意味着null char*没有给出有意义的结果,因此Bad Ptr

换句话说,Watch本身会自动对char*指针进行解引用(仅适用于那些指针)。

答案 1 :(得分:12)

据推测,无论您使用什么来显示指针值,都会显示char*指针指向的任何字符串,因为这些指针有时用于指向字符串。

在这种情况下,为null,它不指向任何字符串,因此无论显示什么,它都会告诉你。