C语言变量的作用域和生存期问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言变量的作用域和生存期问题相关的知识,希望对你有一定的参考价值。

有以下程序
int fun(int x[],int n)
static int sum=0,i;
for(i=0;i<n;i++) sum+=x[i];
return sum;
main()
int a[]=1,2,3,4,5,b[]=6,7,8,9,s=0;
s=fun(a,5)+fun(b,4);printf("%d\n",s);

程序执行后的输出结果是: 60

问: i是一个静态存储类的局部变量 在第一次调用fun函数时,i的值不就变成了4吗? 第二次调用时 for循环中的条件i<n,即i<4不就不成立了么? 怎么最后的答案是60,而不是15呢?

参考技术A 执行f1时a不存在,如果定义的是静态变量,就在生存期中,如果是默认的动态变量,就不在 参考技术B 第二次调用时 for循环时,按for循环的执行过程,先执行括号中第一个表达式i=0,将i变量的值由前一次调用fun函数时的4重新赋值为0。 参考技术C for(i=0;i<n;i++) 这个里面又将 i 设置为0了啊。 参考技术D i被重新赋值为0

在c语言中 分别从变量的作用域和生存期来分析变量各都有哪些种类

第二次调用时
for循环时,按for循环的执行过程,先执行括号中第一个表达式i=0,将i变量的值由前一次调用fun函数时的4重新赋值为0。
参考技术A 局部变量 全局变量
auto regester static extorn
动态存储 静态存储

以上是关于C语言变量的作用域和生存期问题的主要内容,如果未能解决你的问题,请参考以下文章

php变量的作用域和生存期

8——对象的作用域,生存期,……

c语言中的变量总结

js 静态作用域和动态作用域

C语言中,哪种存储类的作用域与生命周期是不一致的?

JS块级作用域和私有变量实例分析