gpt4 book ai didi

c - if 语句中的自增运算符

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:37 26 4
gpt4 key购买 nike

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

第一个:(这不起作用)

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

例如当 k=0 那么它应该是“if (input_str[0] == input_str[1])”

第二:(这个有效)

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

例如当 k=0 那么它应该是“if (input_str[0] == input_str[1])”

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

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

最佳答案

在所有这些情况下:

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

第一个表达式保证在第二个表达式之前被求值。它也可以在第二个表达式之后求值。

即当 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解释为什么会发生这种情况。

关于c - if 语句中的自增运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28751236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com