关于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开脱。。。

  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值