【问题标题】:C++ assignment operator in whilewhile 中的 C++ 赋值运算符
【发布时间】:2018-01-27 14:17:29
【问题描述】:

有人能解释一下这段代码是如何工作的吗? while 中的赋值运算符不是错,我是故意的。如果我在 str1 中输入 N 个值,则输出为 N*2-1 颗星。在这种情况下,输出为 0 颗星。

main中的代码是:

char str1[] = "";
char str2[10];

char *p1 = str1;
char *p2 = str2;

while(*p2++ = *p1++)
    cout << "* ";

return 0;

提前致谢!

【问题讨论】:

  • 那么您想让我们向您解释您自己编写的代码吗?
  • "如果我将 N 个值放在 str1 中,则输出为 N*2-1 颗星。"对我来说,这正是 N 星。此外,警告可能会解释发生了什么:coliru.stacked-crooked.com/a/699469325df59943
  • @NathanOliver:你为什么要对新用户嗤之以鼻?并且 - 您的评论如何帮助他改进问题(或其他)?
  • @einpoklum 这家伙显然让我们做他的功课。 Stackoverflow 不是为此而构建的。
  • @einpoklum 谢谢!我的朋友在测试时有这个问题,我一开始不明白为什么答案是0,然后我不知道为什么星星是N * 2-1所以这就是我寻求帮助的原因。

标签: c++ arrays loops pointers assignment-operator


【解决方案1】:

while 语句的条件可以认为是:

(*p2++ = *p1++) != 0

可以认为是,

(*p2++ = *p1++), *(p2-1) != 0

因为p2 在行中后递增。

循环将继续,直到p1指向的字符串中的空字符被复制到p2指向的字符串中。

【讨论】:

  • 感谢您的帮助!原来输出不是 N*2-1 星,而是 N 从一开始,我的朋友只是弄错了第一个数组的值。现在一切都说得通了,谢谢,周末愉快。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
相关资源
最近更新 更多