我正在学习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而其他指针类型没有?
我现在不关心指向的价值观。我没有取消引用它们(这就是为什么上面有这些错误)。我只是看着这三个指针的观察窗口。
答案 0 :(得分:21)
对于大多数指针类型,Visual Studio中的Watch窗口显示指针的值(它指向的地址),并允许您通过展开 + 来访问指向的值图标。因此,对于空指针,让我们说int
,它只会显示null
或0x00000000
或类似的东西。
char*
的处理方式不同。这里,Watch根本不显示指针值,而是直接将指向的数据解释为NUL
- 终止的字符串并打印出来。这当然意味着null char*
没有给出有意义的结果,因此Bad Ptr
。
换句话说,Watch本身会自动对char*
指针进行解引用(仅适用于那些指针)。
答案 1 :(得分:12)
据推测,无论您使用什么来显示指针值,都会显示char*
指针指向的任何字符串,因为这些指针有时用于指向字符串。
在这种情况下,为null,它不指向任何字符串,因此无论显示什么,它都会告诉你。