请问静态存储和动态存储的区别是什么?最好举个例子,谢谢。小编说的没看懂。
例如求从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
可以大致理解两者的区别就是静态不会释放循环过程中运算的值 会存起来与最后结果一并输出,而自动的话就会把过程释放掉仅留下最终结果
上面回答在自动变量方面有些许错误
定义
在函数内部定义的常规变量称为自动变量,使用自动存储空间。
即这些变量在函数被调用时自动生成,在函数调用结束后自动消亡。
作用域
自动变量是一个局部变量,其作用域为包含它的代码块(指被花括号括起来的一段代码)
#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函数中的局部变量都是重新赋值的,由于结束函数调用,就自动消亡,所以是不会保存,每次都是同样的输出结果。
楼上的回答很全面!
如果用动态存储的话,在程序调试界面就不会看到 x=2,x=4,x=8,x=16,x=32,只会看到最后输出结果 x=32??