劉變蓮

摘要:文章再次闡述指針在C語言程序設計中的應用。主要講述指針的基本概念和基本語法,同時用例子說明指針用在什么地方,及有什么非用不可的理由。最后總結了指針的類型。一句話就是指針可以在抽象層訪問內存單元。最終就是間接使用另一個對象。因為不能直接使用它。指針的使用不能出現空指針或沒有指向對象,就用指針,這是非常危險的。指針可以指向變量,也可以指向函數,也可以指向數組,甚至可以指向指針。
關鍵詞:C語言;間接訪問;指針;內存
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)18-0265-01
接下來執行程序的過程就是從內存單元取指令代碼和數據到CPU中,分析指令、執行指令的過程。也就是程序的執行,每個時刻都在和內存單元打交道,不是取指令就是取數據或者把結果數據存儲到內存單元中。輸入、輸出數據也要和內存單元打交道。
1 基本概念及基本語法
從圖1內存結構知道,訪問內存單元,需要給出相應的地址才能讀寫其中的數據或代碼。所以地址就是讀寫內存單元的關鍵信息。C語言的指針即是內存單元的地址編號。
也可以借指針訪問已經存在的對象,方法是獲取對象的地址即可。C語言的指針即是提供了訪問已經存在對象的第二種手段或方法。見圖2所示。
2 指針能干什么
用指針間接訪問變量;同時也可以提高訪問速度;同時實現動態內存分配及鏈式存儲。
機器語言在機器層工作,和內存單元及內存單元的地址打交道。
高級語言編程在抽象層上設計程序,和變量名、數組名、函數名等一堆名字打交道。編譯器在編譯程序時,其中的變量、函數等對象都要分配內存,所以,程序一旦運行時,直接對應的是內存單元及地址,事實上這些高級語言程序中的名字在運行階段就是指代某內存單元。C語言的指針,就是對底層內存單元的操作,也可以提到抽象層做。
為什么用指針解決問題,就是使用它的間接訪問特性,比如,函數之間是不能共享數據的,但是,有了指針的助力,就可以間接使用函數外的數據,只要把數據的地址傳到函數中即可。為了既共享數據同時還要保護數據,可以使用常指針類型就可以。也可以把函數外的第二個函數傳遞到函數中來,借函數的指針作函數的形參就可以實現。
指針的應用可以讓設計者在抽象層和內存打交道,更直接。能解決一些效率及直接訪問無法解決的問題。如函數間共享數據、函數返回值不能是一個值以上等問題。靜態數組定義時不能擴展容量等問題。復雜數據結構的實現等問題。比如文件的操作就決不能離開指針的助力。打開文件時,系統就構建了操作文件的指針,該指針是指向一個臨時構建的內存區域,其中存儲了文件的相關資料。以后讀寫文件的數據就借這個文件指針完成。最后的步驟是關閉文件。事實是文件指針指向的內存區域釋放了,文件關上了操作的大門。
用指針可以把邏輯上相關的一些數據或函數串聯起來。比如鏈表就是存儲不連續的數據但邏輯上相關,就需要指針變量來建立邏輯關系。許多非數值問題就需要指針、鏈表的幫助,才能解決問題。
3 注意
使用指針時,指針變量一定要指向一個存在的對象后,才能用指針來訪問指向的對象,否則就會出現安全隱患。如下代碼是危險的。
參考文獻:
[1] Jeri R. Hanly, Elliot B. Koffman. C語言詳解M]. 2007.
[2] 裘宗燕. 從問題到程序:程序設計與C語言引論.2版[M]. 機械工業出版社, 2011.
[3] GregPerry. 寫給大家看的C語言書[M]. 人民郵電出版社, 2010.
【通聯編輯:光文玲】