指针是C语言中比较难的一个内容,Keil C51在指针方面有和标准C不一样的地方,今天看了一些资料学习了一下Keil C51 中指针的使用。
keil51的指针,包含两种指针:普通指针,兼容标准C;内存特殊指针
1普通指针char*ptr;//指针占3字节,第一字节是标识存储类型,第二字节是存储地址高位字节,第三字节是低位字节char*xdateptr;//指针存储在片外,xdate是修饰ptr的char*idateptr;//指针存储在片内,指针指向的数据可以是片内也可以是片外
2内存特殊指针charxdate*ptr;//指针存储占字节不一定,根据变量存储类型不同不一样,xdate是修饰*的,也就是数据存储在片外,此时ptr占两个字节charidate*ptr;//数据是片内,指针ptr只有一个字节,icharxdate*dateptr;//指针在片内,数据在片外idata是和char一起修饰数据的
总结:内存特殊指针比一般指针运行快,因为数据存储位置知道,编译时可以优化。指针类型可以转换,但容易出错。所以编程时最好对数据和对指针的修饰都要。
补充:
c51存储类型有:code,data,bdata,idata,pdata,xdata
片内ROM部分:code,8051的只读存储器,程序代码保存的地方
片内RAM部分:
data:片内RAM的低128b,直接寻址方式
idata:片内所有的RAM,只能使用间接寻址访问;
bdata:片内RAM可位