C语言变量的作用域

C语言变量的作用域

变量是相对于常量而言的,代表了内存中具有特定属性的一个存储单元,程序运行期间其值可以改变。

1.基础知识

数据类型:这个不必多说,就是为了确定变量所占内存的大小,如int型占一个字。
作用域:当存在多个文件和函数时,变量在哪个文件的函数中可以被使用。
存在期:变量在程序运行后存在(占据存储区)的时间段,如始终存在,本文件内存在,本函数被调用的时候存在。
变量定义时可以前缀以下关键字,表示特定属性。
auto: 自动变量,变量定义时无前缀,则默认为自动变量;
static:静态变量;
register:寄存器变量,变量存储于寄存器中,现已基本不用;
extern:将全局变量的作用域扩展至此,即,这个关键词出现在哪,则其后声明的全局变量在此后便可使用。

**

2.总体认知

**
按照作用域和存在期划分,变量分为自动变量、寄存器变量、静态局部变量、静态全局变量、全局变量。其总体特性如下表。
在这里插入图片描述

3.具体解释

3.1局部变量

  • 局部变量包括自动变量、静态局部变量、寄存器变量;
  • 局部变量在本函数体内定义,存在于本函数体内;
  • 不同函数内,局部变量可以同名;
  • 函数形参也是局部变量;
  • 在函数体内的符合语句中可定义局部变量,且只存在和作用于该语句中;

3.1.1自动变量

自动变量是局部变量的一种。
定义方式:
函数内定义:

void xxx(void)
{
auto+数据类型+变量名称+;
auto int A=0;
char A=0;
}//这里形参和复合语句的局部自动变量的定义不再举例说明;

变量定义时无前缀,则默认为自动变量
作用域: 在本函数内可以调用;
存在期:在函数内定义,数值可变,存在于函数运行始终,伴随函数开始而存在,结束而消亡。

3.1.2静态局部变量

静态局部变量是局部变量的一种,在函数内定义和使用,存在于函数体外,编译时一次赋值终身不变。
定义方式:

void xxx(void)
{
static+数据类型+变量名称+;
static int A=10;
static int B;
}

在函数体内定义,定义时未赋予初始数值或者字符,则默认为0或者空字符
作用域:在本函数内可以调用;
存在期:在函数内定义,数值不变,在程序编译时存在,并且始终存在,直到程序运行结束,不以函数的运行与否而产生和消亡。

3.2全局变量

全局变量也称外部变量和全程变量,定义后始终存在于整个程序,作用于声明处。

3.2.1全局变量(非静态)

可以理解为auto 关键字缺省;
定义方式:
1、当只有一个文件的时候
数据类型+变量名称;

int A=0;	//全局变量A从此处,存在和作用于向下的全部程序。
void xxx(void)
{
……
}
char B=’c’; 		//全局变量b从此处,存在和作用于向下的全部程序。
void xxxx(void)
{
……
}

2、当有多个文件的时候

//////////////////////////////////////<xxx1.c>/////////////////////////////////
int A=0;	// 全局变量A在此处作用于向下的整个文件。
//全局变量A在程序编译的时候就存在于整个程序,本文件可以使用。
 void xx(void)
{……}
//////////////////////////////////////<xxx2.c>/////////////////////////////////
void xxx(void)
//全局变量A在程序编译的时候就存在于整个程序,本文件可以使用。
{……}
extern A	 //全局变量A在xxx2.c文件的此处作用于向下的整个文件
void xxxxx(void)
{……}
/////////////////////////////////////////////////////////////////////////////////

3.2.2静态全局变量

利用关键字static声明。编译时一次赋值终身不变。主要用于多文件时,对它文件屏蔽该变量。

//////////////////////////////////////<xxx1.c>/////////////////////////////////
static int A=0;		// 静态全局变量A在此处作用于向下的整个文件。
//静态全局变量A在程序编译的时候就存在于整个程序,本文件可以使用。
 void xx(void)
{……}
//////////////////////////////////////<xxx2.c>/////////////////////////////////
void xxx(void)
//全局变量A在程序编译的时候就存在于整个程序,除了定义该静态全局变量的文件外,他文件无法使用。
{……}
extern A	*erro
 //除了定义该静态全局变量的文件外,静态全局变量A无法被他文件使用;
 void xxxxx(void)
{……}
/////////////////////////////////////////////////////////////////////////////////

4.提高知识点

4.1变量的定义和声明

在这里插入图片描述
图4.1
定义一定是声明,声明不一定是定义;
定义在于确立存储空间,声明在于扩展作用域;
全局变量可以一次定义,多处声明,即将其作用域扩展至多处;

4.2变量的存储区

在这里插入图片描述
图4.2
内存一般划分为,程序区、静态存储区、动态存储区;
动态存储区存储:
1、形参
2、局部自动变量
静态存储区存储:
1、全局变量(包含静态和非静态局部变量)
2、static局部变量

猜你喜欢

转载自blog.csdn.net/weixin_42291324/article/details/85336016