static修饰局部变量、全局变量、函数

目录

  • static修饰局部变量
  • static修饰全局变量
  • static修饰函数

static修饰局部变量

局部变量未被static修饰前:
static修饰局部变量、全局变量、函数_第1张图片
这里解释一下上面的代码:首先进入main函数可以发现test函数被调用了10次,当test函数第一次被调用时,系统会在栈区创建整形变量x,并赋初值0。然后x++后打印结果为1,函数执行完后x被释放了。然后test函数第二次调用会重复上面的过程,所以结果为10个1。
局部变量未被static修饰后:
static修饰局部变量、全局变量、函数_第2张图片
这里解释一下上面的代码:首先进入main函数可以发现test函数被调用了10次,当test函数第一次被调用时,系统会在静态创建整形变量x,并赋初值0。然后x++后打印结果为1,函数执行完后x不会被释放了。然后test函数第二次调用时会跳过创建x变量的过程直接来到x++,所以第二次函数调用结果为2,所以整个代码执行完后结果为1-9。
说明:普通的局部变量是放在栈区上的,这种局部变量进入作用域创建,出了作用域释放。但是局部变量static修饰后,这种变量就放在静态区,放在静态区的变量,创建好后直到程序结束才释放。简单来说,局部变量被static修饰后增加了生命周期,但是不影响作用域。

static修饰全局变量

全局变量未被static修饰前:
static修饰局部变量、全局变量、函数_第3张图片
全局变量未被static修饰后:
static修饰局部变量、全局变量、函数_第4张图片
可以看到当在另一个.c文件中用static修饰全局变量后,编译器会报错,报错原因是无法解析外部命令。
说明:全局变量本身是具有外部链接属性的。
即在A文件中定义的变量,在B文件中可以通过[链接]使用。
但是如果全局变量被static修饰,这个外部连接属性就被成了内部连接属性,这个全局变量只能在自己所在的源文件内部使用。简单来说,就是被static修饰的全局变量作用域变小了。

static修饰函数

函数未被static修饰前:
static修饰局部变量、全局变量、函数_第5张图片

函数未被static修饰后:
static修饰局部变量、全局变量、函数_第6张图片
说明:其实原因跟全局变量基本相同。函数本身具有外部链接属性。
当函数被static修饰后,外部链接属性就变成内部连接属性。使得这个函数只能在自己所在的源文件内部使用,其他源文件无法使用,限制了作用域。

你可能感兴趣的:(c语言)