c-for循环中的三元运算符



所以我有以下代码:

#include <stdio.h>
int f(char *c)
{
static int i=0;
for (;*c;*c++=='a'?i--:i++);
return i;
}
int main()
{
for(int i=1; i<4; i++)
printf("%d:%dn", i, f("buba"));
return 0;
}

我已经知道程序的输出中会写什么,但我的问题是为什么?如果您编辑字符串并进行细微的更改,输出将保持不变,即:

1:2
2:4
3:6
函数中声明的静态变量i在程序启动前仅初始化一次。因此,它的值在函数调用之间保留。

在这个循环中

for (;*c;*c++=='a'?i--:i++);

变量i增加了三倍,因为在字母'a'之前的字符串文字中有三个字母

"buba"
^   ^
| 3 |

并且减少了一次。因此,当传递字符串"buba"时,函数的每次调用总共增加2。

例如,如果您将调用类似的函数

f( "123456789a" )

则函数内的变量CCD_ 5将增加CCD_。

相关内容

  • 没有找到相关文章

最新更新