張 瀟
(吉林大學,吉林 長春 130012)
算法程序設計中會用到許多變量,正確有效的使用變量能夠提高程序的邏輯性和效率。常用的編程語言C語言中變量從存儲方式上可以分為動態(tài)存儲方式變量和靜態(tài)存儲方式變量,動態(tài)存儲方式是指在程序運行期間根據需要進行動態(tài)的分配存儲空間,在函數(shù)調用開始時分配,函數(shù)運行結束時釋放,程序運行期間函數(shù)被調用兩次分配給此函數(shù)中動態(tài)變量的存儲空間可能是不一樣的。靜態(tài)存儲方式是在程序運行期間由系統(tǒng)分配固定的存儲空間。C語言中變量從作用域上可區(qū)分為局部變量和全局變量,全局變量全部以靜態(tài)存儲方式存儲,在程序開始執(zhí)行時給全局變量分配存儲區(qū),程序執(zhí)行完畢釋放,在程序執(zhí)行過程中全局變量占據固定的存儲單元。局部變量分為靜態(tài)局部變量和動態(tài)局部變量,靜態(tài)局部變量是在函數(shù)內部用Static聲明的變量,其作用域為聲明變量的函數(shù)內部,但在整個程序的運行期間占據固定的存儲單元,且變量的初始化是在編譯時進行的。在C語言程序設計中,變量的指針就是變量的地址,存放變量地址的變量為指針變量,用來指向另一個變量。指針變量同樣分為全局變量和局部變量,局部指針變量包括靜態(tài)局部指針變量和動態(tài)指針變量。
靜態(tài)局部指針變量為函數(shù)內部用Static聲明的指針變量,其作用域是聲明變量的函數(shù)內部,在程序運行期間占據固定存儲單元。靜態(tài)局部指針變量可以用已經聲明的靜態(tài)局部變量的地址、全局變量的地址進行初始化,但不允許使用動態(tài)局部變量的地址和指針變量值初始化。示例程序用creat()函數(shù)創(chuàng)建了動態(tài)鏈表,用search(int x)函數(shù)搜索年齡為x的學生信息并顯示。示例程序變量情況如表1所示,sq是靜態(tài)整形指針變量,用靜態(tài)整形變量n的地址初始化,示例程序中多次運行search(int x)函數(shù)可連續(xù)搜索年齡為x的學生,第一次運行搜索出鏈表中第一個年齡為x的學生,第二次運行搜索出鏈表中第二個年齡為x的學生,靜態(tài)指針變量sp在search(int x)函數(shù)第一次運行時取得鏈表頭指針,在搜索過程中逐次指向鏈表的下一結點,search(int x)函數(shù)運行結束后sp的存儲單元保留,使得search(int x)函數(shù)下次運行時從該結點繼續(xù)搜索。由于靜態(tài)局部指針變量不允許使用指針變量值初始化,所以在search(int x)函數(shù)中沒有使用static struct student*sp=head語句初始化sp,而采用了if語句使得sp在search(int x)函數(shù)在第一次運行時取得鏈表頭指針。示例程序如下所示。
表1 示例程序變量情況一覽表
靜態(tài)局部變量的作用域為聲明該變量的函數(shù)內部,在整個程序的運行期間占用固定的內存單元,該變量在其它函數(shù)中不能使用,但可以利用全局指針變量在其它函數(shù)引用和改變變量占用內存單元的值,從而起到擴充靜態(tài)局部變量的作用域的作用。在上述示例程序中可以將k聲明為main()函數(shù)中的靜態(tài)局部變量,另外聲明一個整形全局指針變量qp,利用qp變量根據需要在search(int x)函數(shù)中改變k的值,程序如下所示。
高級語言包括各種類型的變量,且變量作用域不同,又有靜態(tài)變量和動態(tài)變量的區(qū)分,各種變量的使用方式不同,初始化的要求也不同,正確使用變量是保證編寫正確程序的基礎,同時設計中合理使用各種變量可以提高編程的效率。
[1]方黨生.基于C語言編程思路的實踐與探索[J].福建電腦,2007,(7):185-186.
[2]譚浩強.C語言程序設計[M].北京:清華大學出版社,2005:155-199.
[3]張福祥.C語言程序設計[M].沈陽:遼寧大學出版社,2010:175-183.