关于C语言中static的问题

  #include<stdio.h>                         

int a=4;
int f(int n){
    int t=0;
    static int a =5;
    if(n%2){int a=6;t+=a++;}
    else{int a=7;t+=a++;}
    return t+a++;

}


void main(){
  int s=a,i=0;
  for(;i<2;i++)s+=f(i);
  printf("%d\n",s);
}

为什么第一次函数运行返回的值是12,
不应该是执行完t+=a++,t=7,a=8吗?
return的是15吗?

阅读 1.5k
2 个回答
  • 第一次执行时候,去到了else的分支,执行int a=7;t+=a++;,执行完毕之后t的值为7
  • 然后返回,执行return t+a++;,此时t=7a=5(这时的a是static修饰的那个a),所以结果是12

这道题考察的知识点是static的在修饰内部变量时候的持久性和同名变量的覆盖问题,你在同名变量选择时候糊涂了,所以才会得出a=8的结论,另外你的if(n%2)估计也是个坑,最好写明确一些if(n%2==0)

新手上路,请多包涵

不要再学++混在一起的垃圾了。
另外你这个代码编译一大堆警告吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进