我正在使用C++来理解指针是如何工作的.我有这段代码使用数组,我只是用它来理解等价物如何与指针一起工作.
int main() { int arr[10] = {1,2,3}; char arr2[10] = {'c','i','a','o','\0'}; cout << arr << endl; cout << arr2 << endl; }
但是,当我运行它时,arr
输出整数数组的第一个元素的地址(如预期的那样),但arr2
不输出字符数组的第一个元素的地址; 它实际上打印"ciao".
我错过了什么或者我还没有学到这个?
这是运算符<<为了重载const void*
而为const char*
.你的char数组被转换为const char*
并传递给那个重载,因为它比to更适合const void*
.但是,int数组将转换const void*
为该类型并传递给该版本.运算符<<的版本const void*
只是输出地址.采用const char*
实际的版本将其视为C字符串,并输出每个字符,直到终止空字符.如果您不想这样做,请在将char数组const void*
传递给operator <<时将其明确转换为:
cout << static_cast(arr2) << endl;