关于cout输出char*的坑。

目录

 

问题引入:

问题原因:

问题解决:

 即兴感言:


问题引入:

我们先来做一道题:

相信有的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开脱。。。

猜你喜欢

转载自blog.csdn.net/QQ1402369668/article/details/83306570