一 动态存储方式与静态储存方式
按变量的生存期来区分,变量有动态存储方式和静态存储方式两种类型。其中全局变量全部存放在静态存储区中,而函数形式参数、自动变量、函数调用时的现场保护和返回地址存放在动态存储区中。
二 局部变量的存储类别
1 自动变量(auto变量)
函数中的局部变量(不包括static存储类别)都是动态的分配存储空间的,数据存储在动态存储区的。在调用该函数时,系统会自动给这些变量分配存储空间,在函数调用结束时就自动释放存储空间,因此这种局部变量被称为自动变量。
关键字auto可以省略不写,并且程序中大多数变量都属于自动变量。
2 静态局部变量(static局部变量)
有时候希望函数中的局部变量在函数调用结束后不消失而继续保留原值,即其占用的内存单元不释放,在下一次调用该函数时,该变量已经有值,这时该变量就被称为静态局部变量。
下面用代码来直观的表示静态局部变量的特点:
说明:
- 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行的期间都不会释放。而自动变量(即动态局部变量)属于动态存储类别,分配在动态存储区空间而不在静态存储区空间,函数调用结束后即释放。
- 静态局部变量不能被其他函数引用,因为它是局部变量。
- 静态局部变量在函数内是可见与存在的,在函数外是存在的,但是不可见。
- 静态存储要多占内存,而且降低了程序的可读性,因此若非必要,不要多用静态局部变量。
另外,再向大家分享一个题目,输出1到10的阶乘值。这个题的方法很多,在这儿我就用一种方法来实现,话不多说,直接上代码。
当i=1时,a=1,返回数值1;当i=2时,由于a是static变量,程序运行时不会释放a的空间,a=1✘2,返回数值2;当i=3时,a=1✘2✘3=6,返回数值6;后面依次类推。
3 寄存器变量(register变量)
如果有一些变量使用频繁,则为存取变量的值要花很多时间,为提高其执行效率,允许将局部变量的值放在CPU的寄存器中,需要时直接从寄存器取出参加运算,不必再到内存中去取,大大的提高了程序的执行效率,这种变量就叫做寄存器变量。
三 全局变量的存储类别
1 在一个文件内扩展外部变量的作用域
调用函数 ,求3个整数中的最大值:
由于a,b,c定义在max函数前面,该函数就不需要有参数传递了,因为max函数可以直接使用外部变量a,b,c的值
2 将外部变量的作用域扩展到其他文件
文件1中:
文件2中:
3 将外部变量的作用域限制在本文件中
在定义外部变量时在前面加一个static声明,这种变量就叫做静态外部变量,这种变量在整个执行期间不释放,其所分配的空间始终存在,它的作用域只限于本文件模块。
总结
好了 ,今天的分享就到了这里了,希望大家能提出些建议,一起共同进步。