(玩(wan)電(dian)子) 電(dian)子技ji)躚 壩胙芯(xin)/div>
當前位置︰單片機教程網 >> 基礎教程 >> 瀏覽文章

鼎汇彩票官网

作(zuo)者:佚(die)名   來源:本站(zhan)原創(chuang)   點擊數:x  更新時間(jian)︰2007年(nian)07月12日(ri)   【字(zi)體(ti)︰ 小(xiao)

指針就是指變(bian)量或數據(ju)所(suo)在(zai)的存(cun)儲區地址(zhi)。如一個字(zi)符型的變(bian)量 STR 存(cun)放(fang)在(zai)內存(cun)單元DATA 區的 51H 這個地址(zhi)中,那(na)麼 DATA 區的 51H 地址(zhi)就是變(bian)量 STR 的指針。在(zai) C 語言中 指針是qie)桓齪苤匾 母gai)念,正確有效(xiao)的使用指針類(lei)型的數據(ju),能更有效(xiao)的表達復雜的數據(ju) 結構,能更有效(xiao)的使用數組(zu)或變(bian)量,能方(fang)便直(zhi)接的處理內存(cun)或其它存(cun)儲區。指針之所(suo)以 能這麼有效(xiao)的操作(zuo)數據(ju),是qie)yin)為無論程序的指令、常量、變(bian)量或特(te)殊寄存(cun)器都要存(cun)放(fang)在(zai)內 存(cun)單元或相應的存(cun)儲區中,這些(xie)存(cun)儲區是按字(zi)節來劃分的,每一個存(cun)儲單元都能用唯一的 編號去讀(du)或寫數據(ju),這個編號就是常說的存(cun)儲單元的地址(zhi),而讀(du)寫這個編號的動作(zuo)就叫做尋 址(zhi),通(tong)過(guo)尋址(zhi)就能訪問到存(cun)儲區中的任(ren)一個能訪問的單元,而這個功(gong)能是變(bian)量或數組(zu)等 是不(bu)可能代替的。C 語言也因(yin)此引入了(liao)指針類(lei)型的數據(ju)類(lei)型,專門用來確fan)ㄆ淥lei)型數據(ju)的 地址(zhi)。用一個變(bian)量來chuang)cun)放(fang)另一個變(bian)量的地址(zhi),那(na)麼用來chuang)cun)放(fang)變(bian)量地址(zhi)的變(bian)量稱為“指針變(bian)量”。 如用變(bian)量 STRIP 來chuang)cun)放(fang)文章開頭的 STR 變(bian)量的地址(zhi) 51H,變(bian)量 STRIP 就是指針變(bian)量。下面 用一個圖表來說明變(bian)量的指針和指針變(bian)量兩個不(bu)一樣的概(gai)念。

變(bian)量的指針就是變(bian)量的地址(zhi),用取地址(zhi)運算符‘&’取得賦(fu)給指針變(bian)量。&STR 就是把 變(bian)量 STR 的地址(zhi)取得。用語句(ju) STRIP = &STR 就能把所(suo)取得的 STR 指針存(cun)放(fang)在(zai) STRIP 指 針變(bian)量中xiao)TRIP 的值就變(bian)為 51H。可見指針變(bian)量的內容(rong)是另一個變(bian)量的地址(zhi),地址(zhi)所(suo)屬的 變(bian)量稱為指針變(bian)量所(suo)指向(xiang)的變(bian)量。

要訪問變(bian)量  STR  除(chu)了(liao)能用‘STR’這個變(bian)量名來訪問之外,還能用變(bian)量地址(zhi)來訪 問。方(fang)法(fa)是先用&STR 取變(bian)量地址(zhi)並(bing)賦(fu)于 STRIP 指針變(bian)量,然後(hou)就能用*STRIP 來對 STR 進行訪問了(liao)。‘*’是指針運算符,用它能取得指針變(bian)量所(suo)指向(xiang)的地址(zhi)的值。在(zai)上圖中指針 變(bian)量 STRIP 所(suo)指向(xiang)的地址(zhi)是 51H,而 51H 中的值是 40H,那(na)麼*STRIP 所(suo)得的值就是 40H。 使用指針變(bian)量之前也和使用其它類(lei)型的變(bian)量那(na)樣要求先定義變(bian)量,而且(qie)形式也相類(lei)似,

一般的形式如下︰

數據(ju)類(lei)型    〔存(cun)儲器類(lei)型〕    *    變(bian)量名;

unsigned  char  xdata  *pi    //指針會佔用二字(zi)節,指針自身(shen)存(cun)放(fang)在(zai)編譯器默(mo)認存(cun)儲區,指

向(xiang) xdata 存(cun)儲區的 char 類(lei)型

unsigned char xdata * data pi; //除(chu)指針自身(shen)指定在(zai) data 區,其它同上

int * pi; //定義為一般指針,指針自身(shen)存(cun)放(fang)在(zai)編譯器默(mo)認存(cun)儲區,佔三個字(zi)節 在(zai)定義形式中xiao)笆ju)類(lei)型”是指所(suo)定義的指針變(bian)量所(suo)指向(xiang)的變(bian)量的類(lei)型。“存(cun)儲器類(lei)型”

是編譯器編譯時的一種擴展標識,它是可選的。在(zai)沒有xiao)按cun)儲器類(lei)型”選項時,則定義為一

般指針,如有xiao)按cun)儲器類(lei)型”選項時則定義為基于存(cun)儲器的指針。限(xian)于 51 芯(xin)片的尋址(zhi)範(fan)圍,


 

指針變(bian)量最大的值為 0xFFFF,這樣就決定了(liao)一般指針在(zai)內存(cun)會佔用 3 個字(zi)節,第一字(zi)節存(cun) 放(fang)該指針存(cun)儲器類(lei)型編碼,後(hou)兩個則存(cun)放(fang)該指針的高低位址(zhi)。而基于存(cun)儲器的指針因(yin)為不(bu)用 識別存(cun)儲器類(lei)型所(suo)以會佔一或二個字(zi)節,idata,data,pdata 存(cun)儲器指針佔一個字(zi)節,code,xdata 則會佔二個字(zi)節。由上可知,明確的定義指針,能節省存(cun)儲器的mu) xiao),這在(zai)嚴(yan)格要求程序 體(ti)積(ji)的項目(mu)中很有用處。

指針的使用方(fang)法(fa)很多,限(xian)于篇(pian)幅以上只能對它做一些(xie)基礎的介紹。下面用在(zai)講(jiang)述常量時 的例程改動一下,用以說明指針的基本使用方(fang)法(fa)。

#include <AT89X51.H> //預處理文件里面定義了(liao)特(te)殊寄存(cun)器的名稱如 P1 口定義為 P1

void main(void)

{

//定義花樣數據(ju),數據(ju)存(cun)放(fang)在(zai)片內 CODE 區中

unsigned char code design[]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,

0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,

0xE7,0xDB,0xBD,0x7E,0xFF};

unsigned int a;    //定義循環用的變(bian)量

unsigned char b;

unsigned char code * dsi;    //定義基于 CODE 區的指針


 

do{

dsi = &design[0];    //取得數組(zu)第一個單元的地址(zhi)

for (b=0; b<32; b++)

{


 

}

}while(1);

}

for(a=0; a<30000; a++); //延時一段時間(jian)

P1 = *dsi;        //從指針指向(xiang)的地址(zhi)取數據(ju)到 P1 口

dsi++; //指針加一,

為了(liao)能清(qing)楚(chu)的了(liao)解指針的工作(zuo)原理,能使用 keil uv2 的軟件仿真器查看(kan)各變(bian)量和存(cun)儲器的

值。編譯程序並(bing)執行,然後(hou)打開變(bian)量kan)chuang)口,如圖。用單步執行,就能查到到指針的變(bian)量。 如圖中所(suo)示的是程序中循環執行到第二次,這個時候指針 dsi 指向(xiang) c:0x0004 這個地址(zhi),這個地址(zhi) 的值是 0xFE。在(zai)存(cun)儲器窗(chuang)口則能察看(kan)各地址(zhi)單元的值。使用這種zhi)fang)法(fa)不(bu)但在(zai)學習時能 幫助更好的了(liao)解語法(fa)或程序的工作(zuo),而且(qie)在(zai)實際(ji)使用中更能讓你更快(kuai)更準確的編寫程序或解 決程序中的問題。


 

鼎汇彩票官网

鼎汇彩票官网

鼎汇彩票官网 | 下一页