我正在尝试提高编程技能,并且在我的课本中尝试了该练习。我想在这里问一个问题:

char strng[] = " Hooray for All of Us ";
char *messPt;

messPt = &strng[0];
for(int i=0;i<20;i++)
    cout << *(messPt + i) << " ";
cout << endl;

messPt = strng;
while(*messPt++!= '\0')
    cout << *messPt ;
cout << endl;

这是输出:
  H o o r a y   f o r   A l l   o f   U
Hooray for All of Us

我的问题是:
  • 实际上在第二个输出的末尾有一个?但这是相反的形式。谁能向我解释为什么会这样?
  • 如果我这样声明char:char strng [] =“我们所有人万岁”
    第二个输出如下所示:ooray for Us of

  • 提前致谢 :)

    最佳答案

    这是因为在while循环的条件下测试是否到达字符串末尾时,将递增messPt:

     while(*messPt++ != '\0')    // tests *messPt = '\0' and also advances messPt by one
        cout << *messPt ;
    

    您可以将其重构为:
    while(*messPt != '\0')
    {
        cout << *messPt ;
        messPt++;
    }
    

    或者,如果您热衷于聪明,可以将其更改为:
    while(*messPt != 0)
        cout << *messPt++;
    

    有时++运算符可能会导致许多隐藏的错误。这就是为什么有人认为应该谨慎使用它的原因。

    07-25 20:14