为了账号安全,请及时绑定邮箱和手机立即绑定

为什么cout打印char数组与其他数组不同?

为什么cout打印char数组与其他数组不同?

C++
慕尼黑8549860 2019-09-26 10:43:01
我正在使用C ++来了解指针的工作原理。我有一段使用数组的代码,我只是用来了解等效项如何与指针一起工作。int main() {         int arr[10] = {1,2,3};         char arr2[10] = {'c','i','a','o','\0'};     cout << arr << endl;     cout << arr2 << endl;}但是,当我运行此命令时,arr输出int数组的第一个元素的地址(如预期的那样),但arr2不输出chars数组的第一个元素的地址;它实际上会打印“ ciao”。我想念的还是尚未了解的是什么?
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

for const void*和for的重载是operator << const char*。您的char数组将转换为const char*并传递给该重载,因为它比to更适合const void*。但是,将int数组转换const void*为该版本并传递给该版本。运算符<<的版本const void*仅输出地址。const char*实际接受版本的版本将其视为C字符串,并输出每个字符,直到终止的空字符为止。如果不希望这样,则在将char数组const void*传递给operator <<时将其显式转换为:

cout << static_cast<const void*>(arr2) << endl;


查看完整回答
反对 回复 2019-09-26
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

因为cout的operator <<重载用于char*输出字符串,并arr2与之匹配。

如果需要地址,请尝试将字符数组转换为空指针。


查看完整回答
反对 回复 2019-09-26
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

虽然强制转换可能是一种更有意义的方法,但是您也可以使用addressof运算符:

cout << &arr2 << endl;


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 960 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信