在if语句中增加运算符

时间:2015-02-26 19:35:39

标签: c

我想在while循环中比较字符串中的相邻字符,但是下面的2个if语句给出了不同的结果。

第一:(这不起作用)

if (input_str[k] == input_str[++k]) {
    count++;
}

e.g。当k = 0时,它应该是" if(input_str [0] == input_str [1])"

第二:(这有效)

if (input_str[k++] == input_str[k]) {
    count++;
}

e.g。当k = 0时,它应该是" if(input_str [0] == input_str [1])"

我想安全的方法将是以下代码,但我仍然想知道为什么另外两个if语句会产生不同的结果。

if (input_str[k] == input_str[k + 1]) {
    count++;
}
k++;

1 个答案:

答案 0 :(得分:4)

在所有这些情况下:

input_str[k] == input_str[++k]
input_str[k++] == input_str[k]
input_str[k] == input_str[k + 1]

第一个表达式 not 保证在第二个表达式之前进行评估。在第二个表达式之后也可以进行评估。

即。何时k = 0

  • input_str[k] == input_str[++k]可能会被评估为input_str[0] == input_str[1]input_str[1] == input_str[1]
  • input_str[k++] == input_str[k]可能会被评估为input_str[0] == input_str[1]input_str[0] == input_str[0]
  • input_str[k] == input_str[k + 1]始终评估为input_str[0] == input_str[1]

简而言之,您在前两种情况下调用未定义的行为,唯一安全的方法是使用k + 1然后递增k的方式

请参阅this question,了解发生这种情况的原因。