【问题标题】:while sentinel variable with post-increment operator带有后增量运算符的哨兵变量
【发布时间】:2019-09-19 18:56:48
【问题描述】:

两者有什么区别:

while(*s++ != '\0') {}

while(*s != '\0') {
   s++;
}

s 是一个char *。后者工作正常。但在第一个循环结束时,*s 不等于 '\0'

【问题讨论】:

  • 在第一个语句中,s 将在 while 循环退出时将一个字符指向空字符之外。在第二个示例中,s 将在 while 循环退出时指向空字符。
  • 循环控制是一样的,只是循环完成后s指向哪里。

标签: c pointers post-increment


【解决方案1】:

如果发生

 while(*s++ != '\0') {}

增量是在条件检查语句本身中作为后增量运算符完成的。在这种情况下,值变化(增量)是算子计算值后的副作用。因此,在使用该值之后(比较),s 会递增。

另一方面,

while(*s != '\0') {
   s++;
}

增量发生在条件块内的后增量,仅当条件为真时才会执行。一旦条件被评估为假,s 就不会增加。

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 2011-04-18
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2021-01-07
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多