int a=1;int f(int c){static int a=2;c=c+1;return(a++)+c;}main(){int i,k=0;
for(i=0;i<2;i++){inta=3;k+=F(a);}k+=a;printf("%d\n",k);}结果为什么是14...
for(i=0;i<2;i++){int a=3;k+=F(a);}k+=a;printf("%d\n",k);}结果为什么是14
展开
展开全部
首先要明确变量的作用域,以及static函数的意义
int a=1; a是全局变量,其作用域为其之后的所有函数,但若函数中又声明了a变量,则全局变量不再起作用
static int a=2; a是静态变量,该变量作用域为f函数,且对其修改都将保存, 所以在f函数内全局变量a不起作用
int a=3, a是局部变量, 其作用域仅为for模块内,for执行完后,局部变量a不再有效,所以在main函数中F(a)调用时是用的局部变量a,但for后面的k+=a;则是全局变量a
这样就可以理解了
i=0; 进入for内部语句, k += F(3)所以 k = 0+F(3) = 0+ (a++ + c + 1) = 2+ 3+1 =6
执行完这个后,静态变量a自加,所以a = 3
i=1; 进入for内部语句, k+=F(3), k = 6+F(3) = 6+ (a++ + c + 1) = 6 + (3 + 3 +1) = 13
执行完这个后,静态变量a自加,所以a = 4
i=2,不再进入for内部
执行k+=a;此处的a为全局变量a,所以 k += 1, k =14
输出
int a=1; a是全局变量,其作用域为其之后的所有函数,但若函数中又声明了a变量,则全局变量不再起作用
static int a=2; a是静态变量,该变量作用域为f函数,且对其修改都将保存, 所以在f函数内全局变量a不起作用
int a=3, a是局部变量, 其作用域仅为for模块内,for执行完后,局部变量a不再有效,所以在main函数中F(a)调用时是用的局部变量a,但for后面的k+=a;则是全局变量a
这样就可以理解了
i=0; 进入for内部语句, k += F(3)所以 k = 0+F(3) = 0+ (a++ + c + 1) = 2+ 3+1 =6
执行完这个后,静态变量a自加,所以a = 3
i=1; 进入for内部语句, k+=F(3), k = 6+F(3) = 6+ (a++ + c + 1) = 6 + (3 + 3 +1) = 13
执行完这个后,静态变量a自加,所以a = 4
i=2,不再进入for内部
执行k+=a;此处的a为全局变量a,所以 k += 1, k =14
输出
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询