【我解C语言面试题系列】001 static有什么用途?

【题目】static有什么用途? 

在网上流传很广的一个答案是:

1、限制变量的作用域

2、设置变量的存储域

我觉得这样答题是不妥当的,有点文不对题的感觉。 

下面是我给出的答案:

static 类型声明符在C语言里面主要有三个用途:

1、声明静态局部变量。

2、声明静态外部全局变量。

3、声明静态外部函数。 

下面是我整理的有关上面三个用法的解释说明。另外《static用法小结》一文有更详细的解释,请参考。

静态局部变量(与auto对比)

1、存储空间分配、作用域和生存期

static分配在静态存储区,作用域仅仅限于声明该变量的函数内部。在程序

整个运行期间都不释放,生存期贯穿于程序运行的整个过程。

auto类型分配在栈上,属于动态存储类别,占动态存储区空间,作用域仅仅限于声明该变量的函数内部。函数调用结束后自动释放,生存期不过是在声明该变量的函数内部。

2、赋初值时的处理方式

static静态局部变量在编译时赋初值,即只赋初值一次;

auto自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

3、未赋初值时的处理方式

如果在定义局部变量时不赋初值的话:

static静态局部变量,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。

auto自动变量,如果不赋初值则它的值是一个不确定的值。 

静态外部全局变量

在C语言中static还用来声明静态外部全局变量,那么这个全局变量的作用域就被限制在本文件内部。

外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

而如果我们声明的全局变量不想被其他文件访问和使用又该怎么办?

那就是在声明的时候前面加上关键字static。 

静态外部函数 

在C语言中我们的函数默认都是全局的,也就是说你可以调用其他文件中的函数。在使用的时候,我们象前面一样在头文件中加上extern就可以了。但是有时候我们写的函数并不想让别的文件访问和调用,那么我们在声明函数的时候前面加上static就可以了。

使用内部函数的好处有二:

1、可以让某些内部函数不为人所能使用,而仅仅让调用者使用他能使用的东西,有利于保护代码。

2、不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

永不止步步 发表于02-24 10:48 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308217个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号