Zeng-fh 2022-02-06 20:12 采纳率: 89.8%
浏览 87
已结题

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

代码一

#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));
}
  • 写回答

4条回答 默认 最新

  • 就一个挺垃圾的跑路人 C/C++领域新星创作者 2022-02-07 09:49
    关注

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

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

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 修改了问题 2月6日
  • 创建了问题 2月6日

悬赏问题

  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据