c语言中的变量按作用域范围可分为,C语言中,从作用域来划分,变量可以分为哪两类?...

2018-11-15 回答

准确而又通俗点来讲,按变量是在函数体之内之外定义分两大种。

1、局部变量:在函数内定义的,属于所在的函数自己所有,与其他函数无关。局部变量随所在函数被调用而产生,随函数返回而消灭。

2、外部变量:也称全局变量。在函数外定义,也就是定义不落在任何函数体内的,本质上属于所有函数共用,从程序一开始运行就存在直到程序结束。

细一点分的话,局部变量还可以分出一种局部静态变量。

3、局部静态变量:定义时在类型名前加static关键字,特点是可以在函数下次被调用时恢复到上一次函数返回前的状态。实质上是它从未消灭,只是因为它只归函数自己使用,函数返回了便没有其他函数能看到它,相当于暂时隐藏消失了而已。不是静态的局部变量称为自动变量,因为自动产生自动消灭。

外部变量也有在定义时类型名前加static关键字的一种分类,可称为外部静态变量。

4、外部局部变量:但不同于局部静态变量是局部变量的恒久版,因为外部变量号称全局,其本身就已经是恒久存在的。外部静态变量实际上反倒变成了外部变量的限制版,仅限同一个文件内的函数使用,因此它更多被称为本地变量,与全局变量相对。

这里看出static关键字的使用前后含义不一,确实有些别扭。与本地变量相类比,函数也有本地版的函数,仅限于被同一个文件内的函数调用,定义时也是在类型名前加static关键字。

这里不得不提到 声明和定义的区别,非常重要。c语言要求所有的名字在使用前都至少要有声明,以知道名字的类型等信息,所有在声明或定义之前就使用的变量默认为其类型是int型,函数则其返回值为int型。任何名称的定义只能有一处,声明则不限,但声明不得与定义相抵触。

通常在多文件的项目中,多将全局变量和外部函数的声明收集在一个头文件中,因为这些名字都是共用的。

因此,c语言的要求是先声明后使用,通过包含头文件、在代码前头位置声明或者在其他函数体内声明,可以延伸作用域。

声明的语法形式与定义很相似,有一些很零散的规则可以区分声明和定义,外部变量的声明和定义可以在类型名前显式加extern关键字。但只有在定义时才可以用“=”后跟值或者表达式的形式予以初始化。

定义时如果不初始化,除将被自动变量外,其他变量默认初始化为全0或者null。

自动变量没有默认初始化,因此如果自动变量定义时不初始化,起始值就是不确定的。

你可能感兴趣的:(c语言中的变量按作用域范围可分为,C语言中,从作用域来划分,变量可以分为哪两类?...)