程序设计中静态变量和指针变量的应用探索*
2011-02-02张潇
张 潇
(吉林大学,吉林 长春 130012)
算法程序设计中会用到许多变量,正确有效的使用变量能够提高程序的逻辑性和效率。常用的编程语言C语言中变量从存储方式上可以分为动态存储方式变量和静态存储方式变量,动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间,在函数调用开始时分配,函数运行结束时释放,程序运行期间函数被调用两次分配给此函数中动态变量的存储空间可能是不一样的。静态存储方式是在程序运行期间由系统分配固定的存储空间。C语言中变量从作用域上可区分为局部变量和全局变量,全局变量全部以静态存储方式存储,在程序开始执行时给全局变量分配存储区,程序执行完毕释放,在程序执行过程中全局变量占据固定的存储单元。局部变量分为静态局部变量和动态局部变量,静态局部变量是在函数内部用Static声明的变量,其作用域为声明变量的函数内部,但在整个程序的运行期间占据固定的存储单元,且变量的初始化是在编译时进行的。在C语言程序设计中,变量的指针就是变量的地址,存放变量地址的变量为指针变量,用来指向另一个变量。指针变量同样分为全局变量和局部变量,局部指针变量包括静态局部指针变量和动态指针变量。
1 静态局部指针变量的应用
静态局部指针变量为函数内部用Static声明的指针变量,其作用域是声明变量的函数内部,在程序运行期间占据固定存储单元。静态局部指针变量可以用已经声明的静态局部变量的地址、全局变量的地址进行初始化,但不允许使用动态局部变量的地址和指针变量值初始化。示例程序用creat()函数创建了动态链表,用search(int x)函数搜索年龄为x的学生信息并显示。示例程序变量情况如表1所示,sq是静态整形指针变量,用静态整形变量n的地址初始化,示例程序中多次运行search(int x)函数可连续搜索年龄为x的学生,第一次运行搜索出链表中第一个年龄为x的学生,第二次运行搜索出链表中第二个年龄为x的学生,静态指针变量sp在search(int x)函数第一次运行时取得链表头指针,在搜索过程中逐次指向链表的下一结点,search(int x)函数运行结束后sp的存储单元保留,使得search(int x)函数下次运行时从该结点继续搜索。由于静态局部指针变量不允许使用指针变量值初始化,所以在search(int x)函数中没有使用static struct student*sp=head语句初始化sp,而采用了if语句使得sp在search(int x)函数在第一次运行时取得链表头指针。示例程序如下所示。
表1 示例程序变量情况一览表
2 使用全局指针变量扩充静态局部变量的作用域
静态局部变量的作用域为声明该变量的函数内部,在整个程序的运行期间占用固定的内存单元,该变量在其它函数中不能使用,但可以利用全局指针变量在其它函数引用和改变变量占用内存单元的值,从而起到扩充静态局部变量的作用域的作用。在上述示例程序中可以将k声明为main()函数中的静态局部变量,另外声明一个整形全局指针变量qp,利用qp变量根据需要在search(int x)函数中改变k的值,程序如下所示。
3 结束语
高级语言包括各种类型的变量,且变量作用域不同,又有静态变量和动态变量的区分,各种变量的使用方式不同,初始化的要求也不同,正确使用变量是保证编写正确程序的基础,同时设计中合理使用各种变量可以提高编程的效率。
[1]方党生.基于C语言编程思路的实践与探索[J].福建电脑,2007,(7):185-186.
[2]谭浩强.C语言程序设计[M].北京:清华大学出版社,2005:155-199.
[3]张福祥.C语言程序设计[M].沈阳:辽宁大学出版社,2010:175-183.