張 瀟
(吉林大學,吉林 長春 130012)
算法程序設計中會用到許多變量,正確有效的使用變量能夠提高程序的邏輯性和效率。常用的編程語言C語言中變量從存儲方式上可以分為動態存儲方式變量和靜態存儲方式變量,動態存儲方式是指在程序運行期間根據需要進行動態的分配存儲空間,在函數調用開始時分配,函數運行結束時釋放,程序運行期間函數被調用兩次分配給此函數中動態變量的存儲空間可能是不一樣的。靜態存儲方式是在程序運行期間由系統分配固定的存儲空間。C語言中變量從作用域上可區分為局部變量和全局變量,全局變量全部以靜態存儲方式存儲,在程序開始執行時給全局變量分配存儲區,程序執行完畢釋放,在程序執行過程中全局變量占據固定的存儲單元。局部變量分為靜態局部變量和動態局部變量,靜態局部變量是在函數內部用Static聲明的變量,其作用域為聲明變量的函數內部,但在整個程序的運行期間占據固定的存儲單元,且變量的初始化是在編譯時進行的。在C語言程序設計中,變量的指針就是變量的地址,存放變量地址的變量為指針變量,用來指向另一個變量。指針變量同樣分為全局變量和局部變量,局部指針變量包括靜態局部指針變量和動態指針變量。
靜態局部指針變量為函數內部用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 示例程序變量情況一覽表



靜態局部變量的作用域為聲明該變量的函數內部,在整個程序的運行期間占用固定的內存單元,該變量在其它函數中不能使用,但可以利用全局指針變量在其它函數引用和改變變量占用內存單元的值,從而起到擴充靜態局部變量的作用域的作用。在上述示例程序中可以將k聲明為main()函數中的靜態局部變量,另外聲明一個整形全局指針變量qp,利用qp變量根據需要在search(int x)函數中改變k的值,程序如下所示。


高級語言包括各種類型的變量,且變量作用域不同,又有靜態變量和動態變量的區分,各種變量的使用方式不同,初始化的要求也不同,正確使用變量是保證編寫正確程序的基礎,同時設計中合理使用各種變量可以提高編程的效率。
[1]方黨生.基于C語言編程思路的實踐與探索[J].福建電腦,2007,(7):185-186.
[2]譚浩強.C語言程序設計[M].北京:清華大學出版社,2005:155-199.
[3]張福祥.C語言程序設計[M].沈陽:遼寧大學出版社,2010:175-183.