给阵列时cout如何工作?

Joh*_*ith 3 c++ cout

可能重复:
为什么cout打印char数组与其他数组不同?

如果我有这个代码:

char myArray[] = { 'a', 'b', 'c' };
cout << myArray;
Run Code Online (Sandbox Code Playgroud)

它给了我这个输出:

abc

但是,如果我有这个代码:

int myArray[] = { 1, 2, 3 };
cout << myArray;
Run Code Online (Sandbox Code Playgroud)

它给了我这个输出:

0x28ff30

为什么不打印123?

tem*_*def 15

第一段代码工作的原因是编译器隐式地将数组转换为const char *字符指针,然后它将其解释为C风格的字符串.有趣的是,这个代码是不是安全的,因为你的字符数组不明确的空值终止.因此,打印它将开始读取和打印字符,直到您巧合地找到空字节,这会导致未定义的行为.

在第二种情况下,编译器将获取int数组并将其隐式转换为int *指向第一个元素的指针,然后从那里转换为const void *指向第一个元素的指针.打印const void *指针cout只打印其地址,因此输出你得到的输出.

希望这可以帮助!