作为学习C++的初学者,我想了解char
类型的数组和int
类型的数组之间的区别。这是我的代码:
void IntArray () {
int array[5] = {5,6,7,8,9};
cout << "Print int array: " << array << endl;
cout << "Print int array[0]: " << array[0] << endl;
cout << "Print int array[0]+1: " << array[0]+1 << endl;
}
void CharArray () {
char array[5] = {'a', 'b', 'c', 'd', '\0'};
cout << "Print char array: " << array << endl;
cout << "Print char array[0]: " << array[0] << endl;
cout << "Print char array[0]+1: " << array[0]+1 << endl;
}
这是输出:
Print int array: 0xbfd66a88
Print int array[0]: 5
Print int array[0]+1: 6
Print char array: abcd
Print char array[0]: a
Print char array[0]+1: 98
我的问题是:
为什么下面输出字符串'0xbfd66a88'?我期待它返回数组中第一个元素的地址:
cout << "Print char array: " << array << endl;
为什么下面输出'98'?我期待它输出字母“b”:
cout << "Print char array[0]+1: " << array[0]+1 << endl;
最佳答案
1.
因为 char
当您将数组流式传输到 cout
时,数组的处理方式与其他数组不同- <<
const char*
运算符重载.这是为了与 C 兼容,因此以 null 结尾的 char
数组被视为字符串。
参见 this question .
2.
这是由于 integral promotion .当您调用二进制文件时 +
用char
(值为“a”)和一个 int
(值为 1),编译器提升你的 char
到 signed int
或 unsigned int
.哪一个是特定于实现的——这取决于是否 char
默认情况下已签名或未签名,并且 int
可拍全系列char
.所以,+
使用值“97”和“1”调用运算符,并返回值“98”。将其打印为 char
,你需要先施放它:
cout << "Print char array[0]+1: " << static_cast<char>(array[0]+1) << endl;
参见 this question .
关于c++ - 使用 cout 将数组和字符打印到屏幕时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23877634/