-1

所以我有以下代码:

#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
4

1 回答 1

1

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

在这个 for 循环中

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

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

"buba"
^   ^
| 3 |

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

例如,如果您将调用函数

f( "123456789a" )

然后i函数内的变量将增加8.

于 2022-02-14T10:44:02.203 回答