猿问

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

我正在使用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”。

我想念的还是尚未了解的是什么?


慕尼黑8549860
浏览 961回答 3
3回答

慕的地8271018

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

蓝山帝景

因为cout的operator <<重载用于char*输出字符串,并arr2与之匹配。如果需要地址,请尝试将字符数组转换为空指针。

慕侠2389804

虽然强制转换可能是一种更有意义的方法,但是您也可以使用addressof运算符:cout&nbsp;<<&nbsp;&arr2&nbsp;<<&nbsp;endl;
随时随地看视频慕课网APP
我要回答