目录
问题引入:
我们先来做一道题:
相信有的IT精英和我一样,会认为cout<<指针,当然是地址了。
这道题在C语言中不是就是:print("%0x",p);嘛!C语言中这样输出为地址,相信大家都没有疑问吧,否则。。。
但是提供的答案却是C。what???马上直接用我所喜爱的Qtcreater验证一下,果然是输出“Hello”。
问题原因:
p是指针毫无疑问,指针中存储的是个地址也是毫无疑问的;
C++里cout太自作聪明了(<<运算符重载),为了省去我们循环输出字符的麻烦,cout<<p;被翻译为输出p指向的字符串值。
问题解决:
那么应该如何输出p哪?
这个时候要输出p的指针值就只能先将其转为void *再输出。因为void型, cout没法输出,只能乖乖输出指针。
char *pC="Hello";
printf("%0x\n",pC);
void* pV = pC;
cout<<pV<<endl;
输出结果一致:
另外说一句int*和其他的是没有问题的,输出地址:
int n;
int* pN = &n;
cout<<pN;
即兴感言:
cpp是在c的基础上的,有一个历史使命就是需要兼容C语言,没办法,有的时候他也很为难。。。
哈哈,算不算为cpp开脱。。。