可能重复:
为什么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只打印其地址,因此输出你得到的输出.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
9196 次 |
| 最近记录: |