这两段代码怎么分析呀?有关静态数组和局部变量的

代码一

#include<stdio.h>
int*fun()
{
    static int a[2]={0,1};
    a[0]+=a[1];
    a[1]+=a[0];
    return a;
}
main() 
{
    int i,*b;
    for(i=1;i<5;i++)
    {
        b=fun();
        printf("%d %d ",b[0],b[1]);
    }
    printf("\n");
}

代码二

#include<stdio.h>
int a=1;
int func(int d)
{
    int b=1;
    static int c=1;
    a++;b++;++c;++d;
    return a+b+c+d;
}
main()
{
    int k,a=4;
    for(k=0;k<3;k++)
       printf("%d,",func(a));
}

代码一😎:
因为数组a在函数内被static 修饰所以在出代码块时不会被销毁(所以也不会重新被开辟)所以还后续进入fun函数时a数组里的内容并没有被销毁和重置依旧是上次运行时的数值.
代码二🤔:

  • 首先我们需要知道的是我们c语言在同时遇到局部变量和全局变量时优先使用局部变量
  • 但是我们在fun函数内并没有看到局部变量a所以我们使用的是全局变量a
  • 然后c有时静态开辟的所以不销毁可以参考代码一
  • 所以最后我们的输出总是比上一次输出多2
    跪拜时间🤪
    如果有帮助记得点采纳,这是舒文回答问题的唯一动力,有问题可以继续问我哦

静态变量只会加载一次并开辟一块内存空间,就是无论你调用了多少遍方法它都只会在第一次调用时加载。而局部变量在每次调用都会进行重新加载并开辟一块内存空间

兄弟,明天再发,这周采纳榜今天截止了🤣🤣
(开个玩笑别当真)

只说代码二:因为static会延长变量的生命周期,在函数使用完以后不会销毁,所以把每次的值都叠加起来,之后就会得到正确结果😏