函数中声明的静态变量
所以我有以下代码:
#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_。