話說,C語言中最精髓的就是指針的操作了。當然,本文不對C語言的指針做詳細的描述。Hanny在這里只想小結一下KeilC中的指針類型。
在KeilC中,我們會常見到下述的指針定義方式: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;
看到這里,可能會有人有點亂了吧。其實要理清上面這一堆東西很簡單。
首先,我們需要了解51的內存結構。簡單地說,就是51包括data/idata、xdata、code三大塊。定義指針時,*后面的修飾符是用來表示指針的存儲位置。如:ptr5、ptr6、ptr7、ptr8存儲在data區中,ptr9、ptr10、ptr11、ptr12存儲在xdata中。ptr1、ptr2、ptr3、ptr4的存儲位置則取決于KeilC中的設置(使用內存的模式)。
*之前的修飾符,則是用來表示指針所指向的數據的存儲位置,即指針類型。ptr2、ptr6、ptr10的指針,指向一個存儲在code中的數據。ptr3、ptr7、ptr11的指針,指向一個存儲在data中的數據。ptr4、ptr8、ptr12的指針,指向一個存儲在xdata中的數據。
ptr1、ptr5、ptr9這三個指針有一點點特殊。沒有修飾類型這表示這是一個通用指針,它將用3Byte來表示。其中第一字節表示指針類型,后兩個指針存放指針地址。而類型中,0xff表示指針存放在code中,0x00表示data/idata,0x01表示xdata。
綜上所述,若一個指針為char xdata * xdata,如ptr12,則該指針表示一個存放在xdata中的指針,并且該指針指向一個xdata的數據。
在使用過程中,只要注意到了這些類型,應該是不會出什么問題的。