×

C语言中静态变量的概念和用法

前端技术网 前端技术网 发表于2023-12-31 17:33:47 浏览355 评论0

抢沙发发表评论

一、c语言中什么是静态局部变量

static用修饰符来声明的变量叫静态变量。

这种变量和一般的变量不同。从程序开始到程序结束一直存在。

C语言中静态变量的概念和用法

局部静态变量。是在函数内部声明的静态变量。

局部静态变量的值有一个特性,它会保存你操作的结果。

举个例子:

int test(int a)

{

static int sum= 5;

C语言中静态变量的概念和用法

sum+= a;

return sum;

}

当你第一次调用时 static int sum= 5;起作用

int a1= test(2);// a1= 7同时 sum= 7

当你第二次调用时 static int sum= 5;不起作用 sum= 7

int a2= test(2);// a2= 9 sum= 9

这是因为用static声明的变量分配的地址不是在栈中。在完成第一次调用后,它仍然存在,并且有个值。第二次调用时,并不会再重新生成一个变量,还会使用上一次函数完成时的值。

二、C语言动态变量和静态变量的区别

一、形式不同:

静态变量是在定义的时候,有static修饰的变量,形式为static TYPE var_name= init_value;

动态变量,形式为TYPE var_name= init_value;即没有static修饰,其中的=init_value均可省略。

二、作用不同:

动态全局变量:作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量,生命周期为从程序运行到程序退出,即贯穿整个运行时间。

静态全局变量:作用域为当前文件,从定义/声明位置到文件结尾,生命周期为从程序运行到程序退出,即贯穿整个运行时间。

常量使用

静态变量也可以用于存储常数。具体来说,静态变量(全局变量及汇编语言里定义的符号亦同)可用const,constant或final(根据语言决定)等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。

编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区;为防止常数变量被错误的指针写入覆盖,亦可在这块区域启用内存保护机制。

以上内容参考:百度百科-静态变量

三、C语言中的静态局部变量的定义

简单跟你说说吧,静态变量是放静态区的,程序结束后OS会自动回收内存的,不用你操心。而局部变量不用我说了吧,简单理解成:在大括号中的都是局部变量,放栈区,static是静态变量的标示符。{

static int a=0,b=2;

static int sum=0,i;

};

这里的a,b,sum,i都是静态局部变量。如果你不写static的话,就是动态局部变量(默认就是动态的),或者你写auto也是动态局部变量。执行到大括号末尾的时候,这几个变量会从内存中消失的。

如果你不是写在大括号中,而是写在外面的,就是全局变量,加上static就是私有的全局变量。

其实你这个问题问得挺幼稚的。。。。

满意请采纳,谢谢

四、C语言中静态变量与动态变量的定义与区别

动态变量和静态变量定义和区别如下:

1、定义上,静态变量比动态变量多一个关键字static,比如:

动态变量:int i;

静态变量:static int i;

2、动态变量在子程序中,每次调用时都会从零开始,不会保留原有数据,静态变量调用时原有值不会发生改变,比如:

main()

{

int i;

for(i=0;i<5;i++)fun();//fun1();

}

void fun()//输出结果为11111

{

int j;

j++;

printf("%d",j);

}

void fun1()//输出结果为12345

{

static int j;

j++;

printf("%d",j);

}

好了,文章到此结束,希望可以帮助到大家。