[C.C++] Keil C语言数据类型,KeilC的指针类型

733 0
Honkers 2025-3-16 22:44:27 | 显示全部楼层 |阅读模式

话说,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的数据。

在使用过程中,只要注意到了这些类型,应该是不会出什么问题的。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行