全局变量和局部变量

变量的作用域

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的而限定这个名字的可用性的代码范围就是这个名字的作用域。 

  • 局部变量的作用域是变量所在的局部范围
  • 全局变量的作用域是整个工程

变量的生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段 

  • 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束 
  • 全局变量的生命周期是:整个程序的生命周期
常变量标识符const
宏/常量定义标识符#define
静态变量标识符static
  • const: 修饰的变量为常变量,被它修饰后一但初始化就不能再被改变,但是本质还是一个变量
  • #define: 被它修饰的为常量,常量不能被改变

 

 

 由上图可以看出,因为初始化数组大小要用常量表达式才可以通过编译

static(静态修饰符): 

  • 修饰局部变量---称为静态局部变量
  • 修饰全局变量---称为静态全局变量
  • 修饰函数---称为静态函数
  1.  静态局部变量:局部变量没有被static修饰时,会被存放在栈中(局部变量、函数形参、临时变量),而在栈中的元素只作用在自己所在的局部范围内出了这个局部范围就会被销毁,而被static修饰后会被放在静态区中(静态变量、全局变量),而静态区中的元素如全局变量它的生命周期为整个程序,所以静态局部变量(生命周期会发生改变,作用域不变)

 

 

由上图可看出当局部变量被static修饰后生命周期变了 

2.静态全局变量和静态函数:全局变量本来是有外部连接的(比如在A文件中通过连接在B中使用),但被static修饰后外部连接变成了内部连接,使得这个全局变量只能在自己所属的源文件中使用


//文件.c 1
extern int a;
int main()
{

	printf("%d", a);
	return 0;
}

//文件.c 2
static int a = 10;

 在两个文件中创建后,运行上面代码会报错,extern标识符是用来声明外部变量的

3.extern:

如果一个项目中有两给.c文件其中一个有main函数去调用另一个文件中的(如上面的a变量)来打印就需要extern标识符,在哪里定义作用范围就在哪

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值