人物印刷混乱

时间:2015-05-15 01:12:56

标签: c++ character sequences

我有一些代码:

#include <iostream>
#include <string>
using namespace std;
int main(){
    char abc [20] = "Hello Hello Hi";
    char* ptr = abc;
    cout << (abc+3);
return 0;

}

为什么从第三个字符开始打印出来而不仅仅是第三个字符?

-edit-向谁标记它。它与prinf()不同,但是相同类型的概念。我只是不知道细微差别

3 个答案:

答案 0 :(得分:7)

要理解为什么,你必须了解一些指针算法。

abc与&amp; abc [0]相同,(abc + 3)与&amp; abc [3]相同

据说,cout将一个字符串从给定的char *打印到一个空字符。

因此,您基本上只是将从第三个字符开始的字符串打印到字符串的末尾。如果你只想打印第三个字符,可以取消引用指向第三个字符的指针。

 *(abc + 3)

答案 1 :(得分:4)

char abc [20]衰减到char*,这实际上是一个c风格的字符串。 abc+3仍然是一个指针,只是偏离abc[0],因此std::cout仍会将其打印为字符串。

答案 2 :(得分:2)

因为流有char*的重载,它将输入视为C-String。流操作符将打印所有内容,直到空终止符(当显示char*时)。

如果您要打印单个字符,则必须将表达式转换为char而不是char*

cout << (abc+3);     // Type of expression is char*

cout << (*(abc+3));  // Type of expression is char
                     // This prints a signle character.