关于cout输出char*的坑。

本文探讨了在C++中使用cout输出指针时的默认行为,并解释了为何输出结果并非预期的地址,而是指针所指向的内容。通过实例演示如何正确输出指针值,以及与其他类型如int*的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

问题引入:

问题原因:

问题解决:

 即兴感言:


问题引入:

我们先来做一道题:

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值