一.static修饰全局变量:
1.修饰全局变量时:该变量只在本文件内访问,不能被外部文件直接访问。
2.修饰全局变量时:该变量的作用域改变了,但是变量的生命周期不会改(从定义到结束时都不会被释放)
例如:在test.c内创建一个static修饰的变量,在本文件内才可以使用该变量(作用域改变:从整个工程的作用域变成了本文件内部),并且此时生命周期还是全局生命周期(生命周期不变)。
二.static修饰局部变量:
修饰局部变量时:该变量作用域不变(还是在变量所在的代码块内起作用,即花括号{}内部),但是其生命周期改变了(由临时变量周期变成了全局生命周期)。
例如:static修不修饰局部变量,函数调用完后,该变量出了函数的代码块,就不起作用了,函数外部检测不到的该变量,作用域还是没变的。因为函数调用完后,就会销毁函数内部的数据。
但是若是static修饰了该变量,就会延长该变量的生命周期(即该变量的值还保留在内存中,如果下次调用该函数时,此变量在函数内部的值还是之前的值,变量的值不会被释放)。
注意:理解生命周期和作用域,两者并不是一个意思。
生命周期:是指从定义变量到变量失去作用结束被释放的过程的时间。
作用域:是指在变量定义完,并且能起作用,能被使用的一定区域。
三.static修饰函数:
static修饰函数时:该函数也只能在本文件内访问,在本文件内部可以调用该函数。不能被外部其他文杰直接访问,但是可以间接访问,在外部调用其他的函数,该函数定义在static修饰的那个函数的文件内,此时就相当于在本文件内了,可以访问static修饰的函数了。