page contents

static关键字的作用是什么?static全局变量与普通全局变量的区别是什么?static局部变量与普通变量的区别是什么?static函数与普通函数的区别是什么?

轩辕小不懂 发布于 2021-10-07 13:54
阅读 599
收藏 0
分类:开发环境
2090
Nen
Nen
- 程序员

1)static全局变量的作用域范围是有限制的,即如果一个变量被声明为静态的,那么该变量可以被模块内所有函数访问,但不能被模块外其他函数访问,它是一个本地的全局变量。而普通全局变量能被其他模块访问。

2)在函数体内,静态变量具有“记忆”功能,即一个被声明为静态的变量在这一函数调用结束后,它的值仍然被保存着,当这个函数下一次被调用的时候,这个静态变量的值仍然是上次调用后的结果(需要注意的是,函数中的静态变量只初始化一次),而函数体内的普通变量没有记忆功能。示例代码如下:

attachments-2021-10-zWtsZK4J615e8d67cfc23.jpg程序的运行结果为:

attachments-2021-10-B2pt9wZi615e8d925bf0c.jpg分析:函数fun1中把value定义为静态变量,它会在第一次调用的时候初始化为0,由于其具有记忆功能,只会被初始化一次。因此,在调用函数fun1(0)的时候,函数fun1内部的value被初始化为0,语句printf("%d ",++value);输出结果为1;当调用函数fun1(4)的时候,语句static int value=i;不会再被执行(只能初始化一次),此时value的值为1,打印语句printf("%d ",++value)的输出结果为2。同理,第三次调用函数fun1(7)时,输出的结果为3。而对于普通变量而言,没有记忆功能,每次被调用的时候都需要初始化。调用fun2函数的时候,value每次都会被初始化为传入的参数,因此每次输出++value的值就是实参+1。3)如果一个函数被声明为静态的,那么该函数与普通函数的作用域不同,静态函数的作用域仅在本文件中,它只能被这一模块内的其他函数调用,不能被模块外的其他函数调用。也就是说,这个函数被限制在声明它的模块的本地范围内使用。而普通函数可以被其他模块使用。

请先 登录 后评论