char a[] = {'k','l','m'};
cout << a << endl;
int b[] = {1,2,3};
cout << b << endl;
我运行上面的C ++代码,这是输出:
klm
0x22fe00
我发现char是唯一具有此行为的主要类型。为什么会这样?是否有char类型的特色?
答案 0 :(得分:1)
数组的名称通常会计算其第一个元素的地址。标准输出流将字符指针解释为字符串,并将数据打印为字符串。对于整数,没有这样的解释,所以你看到实际的指针值。
答案 1 :(得分:1)
char[]
本质上是C和C ++如何处理字符串。已为operator<<
重载了char[]
以打印出char
数组的值。另一方面,数组基本上被视为其基本元素的常量指针:
const int* p = &b[0];
因此,当您执行cout << b << endl
时,实际上是在打印出阵列的基址。这就是你得到十六进制数的原因。