问答详情
源自:5-11 变量存储类别

静态存储和动态存储的区别

请问静态存储和动态存储的区别是什么?最好举个例子,谢谢。小编说的没看懂。

提问者:qq_二狗君_0 2016-11-24 16:15

个回答

  • 无切w
    2016-11-25 13:40:00
    已采纳

    例如求从1开始每次计算乘2循环5次

    void fn()

    {

        static int x = 1;   //定义静态局部变量

        x*=2;        //定义每次循环的计算式

        printf("x=%d\n",x);  //显示X的值

    int main()

    {

        int i;

        for(i=0;i<5;i++)

        {

            fn();

        }

        printf("x=%d\n",x);

        return 0;

    }

    /*这里用的是静态存储,所以我每一次循环输出的值都会被记录下来,x=2,x=4,x=8,x=16,x=32在程序调试界面就会看到 这几个值 */

     同样的例子用auto的话

    void fn()

    {

      auto   int x = 1;   //定义   auto  局部变    量

        x*=2;        //定义每次循环的计算式

        printf("x=%d\n",x);  //显示X的值

    int main()

    {

        int i;

        for(i=0;i<5;i++)

        {

            fn();  

        }   

        printf("x=%d\n",x);

        return 0;

    }

    用了auto的话计算的过程存储的值就会得到释放 则最后输出结果 x=32


     可以大致理解两者的区别就是静态不会释放循环过程中运算的值 会存起来与最后结果一并输出,而自动的话就会把过程释放掉仅留下最终结果

  • 学之舟_36820
    2016-12-17 18:38:17

    上面回答在自动变量方面有些许错误

    定义

    在函数内部定义的常规变量称为自动变量,使用自动存储空间。

    即这些变量在函数被调用时自动生成,在函数调用结束后自动消亡。

    作用域

    自动变量是一个局部变量,其作用域为包含它的代码块(指被花括号括起来的一段代码)

    #include <stdio.h>
    void fn()
    {
    	auto int x = 1;   //定义 auto 局部变量
        x*=2;        // 定义每次循环的计算式
        printf("x=%d\n",x);  // 显示X的值
    }
    int main()
    {
        int i;
        for(i=0;i<5;i++)
        {
            fn();  
        }
        return 0;
    }

    输出结果

    x=2
    x=2
    x=2
    x=2
    x=2

    在循环中调用fn函数,每次调用,fn函数中的局部变量都是重新赋值的,由于结束函数调用,就自动消亡,所以是不会保存,每次都是同样的输出结果。

  • qq_墨中白_04406896
    2016-11-25 23:22:46

    楼上的回答很全面!


  • qq_二狗君_0
    2016-11-25 16:18:38

    如果用动态存储的话,在程序调试界面就不会看到  x=2,x=4,x=8,x=16,x=32,只会看到最后输出结果 x=32??