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
。
所以我有以下代码:
#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
。