学习C程序设计(四)函数
1.1
变量是有类型的,要先定义再使用。
那我们定义的数据类型,体现了变量的操作属性。
现在是变量的存储类型,影响到变量存储的位置,变量起作用的范围和变量值保留的期限。
变量的生存期,变量存储的不同位置(寄存器,静态存储区,动态存储区)也将影响到变量它的值保留的期限。分为静态和动态
变量的作用域值,也会影响到变量在什么区域内有效。分为全局和局部
变量的存储类型:auto(自动)、register(寄存器型)、static(静态型)、extern(外部型)
保留的范围和起作用的范围
1.2
局部变量:在函数或复合语句内定义,在定义它的函数或复合语句内有效。
说明:不同函数中同名变量,占不同内存单元;
形参属于局部变量;
局部变量只在函数调用时起作用,函数调用结束,值就消失。
1.3
全局变量:在函数外定义,可为本文件内所有函数共用。
有效范围是从定义该变量的位置到本源文件结束。如果想在定义之前使用变量,可以用extern来说明。(全局变量的有效范围是从定义它的位置开始,到那个文件结束,如果你把一个全局变量定义在了程序中间,可是在定义之前有的函数要使用这个外部变量,那么我们可以在程序的一开始用这个关键字对那个外部变量做说明,于是在文件中的所有的函数中就都可以使用哪个外部变量)
1.4
动态变量程序运行期间分配固定存储空间;从程序开始执行到程序结束;
静态变量程序运行期间根据需要动态分配存储空间;从包含该变量定义的函数开始执行至函数执行结束
变量的生存期,亦为变量值保留的期限
1.5
存储类型
auto自动变量:定义自动变量的函数被调用时,才为自动变量分配内存。函数调用结束时,为自动变量分配的内存被释放。
自动变量仅在定义它的函数内部有效。
自动变量被存放在内存的动态存储区
结论:自动变量的生存期和可见性(作用域)仅限于定义它的函数内部。自动变量是一种局部变量。
static静态变量
静态变量存储在内存的静态存储区,有固定的地址。
静态变量在程序运行期间,变量值自始至终保留。
静态变量static分为局部静态变量和全局静态变量。
局部静态变量:函数内部定义,函数外不可见。程序运行期间,值保留。
全局静态变量:函数外定义,仅本文件内部其他函数可以访问。
静态变量存储特性:在编译阶段,为静态变量分配内存。静态变量被存放在内存的静态存储区。
静态变量的生存期是在程序运行的整个时期,整个程序运行结束时,为静态变量分配的内存才被释放。
静态变量尽在定义它的函数内部有效。
在编译阶段定义静态变量时,静态变量被置位0。
关键字static和auto决定变量被存放在内存的哪个数据区。
外部变量extern
外部变量的生存期是在程序运行的整个时期,可见性(作用域)从定义它的位置到文件结束。
外部变量是一种全局变量。
同名的外部变量和局部变量,是不同的两个变量。函数内部说明了一个和外部变量同名的局部变量,则外部变量被屏蔽。
==================================================================================================
我们还介绍了寄存器变量,一般情况下变量值是放在内存中,使用的时候,由控制器发出指令,将内存中该变量的值取出,送到运算器中。在经过运算器进行运算。
如果需要存,再从运算器将数据送到内存存放。
那么,如果有些变量使用频繁,我们就可以将这个变量放在寄存器中而不需要花时间到内存中存或取,寄存器变量是有限制的,通常只有局部自动变量和形参可以作为寄存器变量。另外一个计算机系统中寄存器的数目也是有限的