c++通过cout输出字符变量的地址

今天,我遇到了这样的一种情况,我想输出一个字符串的首地址。
那么该怎么输出呢?通常我们可能的想法是直接cout啊。
比如:

char ss[20]="hello";
cout<<ss<<endl;

运行结果:
hello

我们会发现,ss存储的值虽然是一个地址,但我们执行cout的时,实际上它会输出ss指向的字符串。
那该怎么办?我在输出的时候其实考虑到上面的情况了,然后我想了想,如果我这样输出是不是就可以了:

char ss[20]="hello";
cout<<&ss[0]<<endl;

但实际运行结果还是:

hello

通过上面的例子我们会发现,只要我们cout后面的输出对象是一个char*的类型时,它都会当作要输出这个地址指向的字符串来执行。它会从这个地址开始输出字符,直到遇到’\0’停止。那我们怎样才能让cout输出char*类型存值的地址呢?
c是靠%s,%x,%p来区分指针表达式&ss[0]的输出形式的;c++没有这个格式控制,只能按一种形式输出。
c++标准库中I/O类对输出操作符<<重载,在遇到字符型指针时会将其当做字符串名来处理,输出指针所指的字符串。
既然是这样,我们只需要将char*类型的指针进行强制转换成别的类型的指针,cout就会输出指针存储的地址。我们可以把它强转成void*类型。

char ss[20];
cout<<(void*)ss<<endl;

运行结果:

0x7fff695cf900

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值