for循环中的三元运算符

Ternary operator in a for loop

所以我有以下代码:

#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:%d\n", i, f("buba"));
    return 0;
}

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

1:2
2:4
3:6

函数中声明的静态变量i在程序启动前只初始化一次。所以它的值在函数调用之间被保留。

在这个for循环中

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

变量i增加了三倍,因为在字母'a'

之前的字符串文字中有三个字母
"buba"
^   ^
| 3 |

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

例如,如果您要像这样调用函数

f( "123456789a" )

那么函数内的变量i将递增8