为什么只有char*是<Bad Ptr>,而不是其他数据类型?

HJS*_*HJS 18 c++ pointers visual-studio

我正在学习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
Run Code Online (Sandbox Code Playgroud)

为什么只有char类型指针给出Bad Ptr而其他指针类型没有? 在此输入图像描述

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

Rei*_*ica 21

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

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

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

  • 谢谢.Ach,我把自己与"指针值"和"指向价值"混为一谈.因此,在指针的情况下,Watch窗口中的"Value"列是"它指向的地址"(="指针值"). (3认同)

Mik*_*our 12

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

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