話(huà)說(shuō),C語(yǔ)言中最精髓的就是指針的操作了。當(dāng)然,本文不對(duì)C語(yǔ)言的指針做詳細(xì)的描述。Hanny在這里只想小結(jié)一下KeilC中的指針類(lèi)型。
在KeilC中,我們會(huì)常見(jiàn)到下述的指針定義方式:char *ptr1;
char code *ptr2;
char data *ptr3;
char xdata *ptr4;
char *data ptr5;
char code *data ptr6;
char data *data ptr7;
char xdata *data ptr8;
char *xdata ptr9;
char code *xdata ptr10;
char data *xdata ptr11;
char xdata *xdata ptr12;
看到這里,可能會(huì)有人有點(diǎn)亂了吧。其實(shí)要理清上面這一堆東西很簡(jiǎn)單。
首先,我們需要了解51的內(nèi)存結(jié)構(gòu)。簡(jiǎn)單地說(shuō),就是51包括data/idata、xdata、code三大塊。定義指針時(shí),*后面的修飾符是用來(lái)表示指針的存儲(chǔ)位置。如:ptr5、ptr6、ptr7、ptr8存儲(chǔ)在data區(qū)中,ptr9、ptr10、ptr11、ptr12存儲(chǔ)在xdata中。ptr1、ptr2、ptr3、ptr4的存儲(chǔ)位置則取決于KeilC中的設(shè)置(使用內(nèi)存的模式)。
*之前的修飾符,則是用來(lái)表示指針?biāo)赶虻臄?shù)據(jù)的存儲(chǔ)位置,即指針類(lèi)型。ptr2、ptr6、ptr10的指針,指向一個(gè)存儲(chǔ)在code中的數(shù)據(jù)。ptr3、ptr7、ptr11的指針,指向一個(gè)存儲(chǔ)在data中的數(shù)據(jù)。ptr4、ptr8、ptr12的指針,指向一個(gè)存儲(chǔ)在xdata中的數(shù)據(jù)。
ptr1、ptr5、ptr9這三個(gè)指針有一點(diǎn)點(diǎn)特殊。沒(méi)有修飾類(lèi)型這表示這是一個(gè)通用指針,它將用3Byte來(lái)表示。其中第一字節(jié)表示指針類(lèi)型,后兩個(gè)指針存放指針地址。而類(lèi)型中,0xff表示指針存放在code中,0x00表示data/idata,0x01表示xdata。
綜上所述,若一個(gè)指針為char xdata * xdata,如ptr12,則該指針表示一個(gè)存放在xdata中的指針,并且該指針指向一個(gè)xdata的數(shù)據(jù)。
在使用過(guò)程中,只要注意到了這些類(lèi)型,應(yīng)該是不會(huì)出什么問(wèn)題的。