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