-cfyjbjonn 2019-01-22 11:03 采纳率: 57.1%
浏览 2360
已采纳

c语言static加与不加的区别

问错了,编辑一下,我是想问为什么加了static之后输出的y全部是3,但是x的输出又是根据static的y的变化得到的?

我知道x+=y++的意思,x,y的定义写在函数外面是什么意思。

以及请问能否详细解释加和不加static的输出结果是怎么得到的,感谢。

#include <stdio.h>
int x = 0,y = 3;
void fun()
{
   // static int y = 1;
    x+=y++;
}

void main()
{
    int i;
    for(i = 1; i < 4; i++)
    {
        fun();
        printf("%d,%d\n",x,y);
    }
}

  • 写回答

12条回答

  • 大内群英7 2019-01-22 14:53
    关注

    我明白楼主的问题,首先我对楼主的代码做了一些更方便直观探索数据变化的修改,将不加static和加了之后的代码和结果呈现在这里:
    不加static
    加static
    接下来一一回答楼主的问题:
    为什么加了static之后输出的y全部是3,但是x的输出又是根据static的y的变化得到的?
    看图二既打印了函数func1()内部y的值随后又打印了main()函数中的y值,一目了然,
    加了static y = 1;这行代码之后,函数func1()中的静态变量y覆盖外面定义的全局变量y,
    每次func1()中操作的都是它自己内部定义的占有固定存储位置的变量y,该值在函数func1()内部可见,并且累加,
    然而离开该函数,便被外面的全局变量y所覆盖,所以main()函数打印的是全局的y,始终是3.

    x,y的定义写在函数外面是什么意思
    x,y写在函数外面表明这两个变量全局可见,超越函数代码段的限制,只要没有被覆盖可以在任何地方被修改,并保留修改后的值,一旦被覆盖,在覆盖到的代码段对其操作无效,操作的只是同名的段内覆盖定义。

    详细解释加和不加static的输出结果是怎么得到的
    我认为楼主就直接看我的两站加和不加的前后对比的附图足以能明白变量的变化过程和状态,第一个问题其实已经详细回答了加static的结果如何得到,不加static就更容易理解了,结合第二个问题的回答,因为不加的话它就纯粹是个全局变量,有没有别的定义覆盖它,一直被能修改的地方修改,并保留修改后的结果。

    望采纳,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

悬赏问题

  • ¥15 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题