为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

5 回答

例如求从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


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

3 回复 有任何疑惑可以回复我~
#1

qq_二狗君_0 提问者

如果用动态存储的话,在程序调试界面就不会看到 x=2,x=4,x=8,x=16,x=32,只会看到最后输出结果 x=32??
2016-11-25 回复 有任何疑惑可以回复我~
#2

奥古斯都_刚铎

试了一下第二种的结果是5个都是等于2,不是32啊?还有return 0之前的printf好像不对,里面的x没有定义啊??
2017-03-01 回复 有任何疑惑可以回复我~

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

定义

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

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

作用域

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

#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函数中的局部变量都是重新赋值的,由于结束函数调用,就自动消亡,所以是不会保存,每次都是同样的输出结果。

7 回复 有任何疑惑可以回复我~
#1

无切w

谢谢指出
2017-04-03 回复 有任何疑惑可以回复我~
#2

无切w

谢谢指出
2017-04-03 回复 有任何疑惑可以回复我~

楼上的回答很全面!


2 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

无切w

对,可以理解为动态存储把过程的存值都释放掉了,只留下最后需求的
2016-11-25 回复 有任何疑惑可以回复我~
#2

宝慕林8006028

用动态存储不是x=2吗
2017-03-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926020    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信