字符数组[]奇怪的输出

char array[] weird output

本文关键字:输出 数组 字符      更新时间:2023-10-16
char a[] = {'k','l','m'};
cout << a << endl;
int b[] = {1,2,3};
cout << b << endl;
我运行上面的c++代码,输出如下:
klm
0x22fe00

我观察到char是唯一具有这种行为的主类型。为什么会发生这种情况?char类型有什么特殊之处吗?

数组的名称通常求值为其第一个元素的地址。标准输出流将字符指针解释为字符串,并将数据打印为字符串。对于整数,没有这样的解释,所以您看到的是实际的指针值。

char[]本质上是C和c++处理字符串的方式。operator<<已经过载,char[]需要输出char数组的值。另一方面,数组本质上被视为指向其基元素的常量指针:

const int* p = &b[0];

因此,当执行cout << b << endl时,实际上是打印出数组的基址。