2.2.4 指针:用于直接读取或修改内存值 1、指针变量定义 变量指针:一个变量在内存中的起始地址称为这个变量的指针,说白了,指针就是地址。 指针变量:专门用来存放其它变量起始地址的变量称为指针变量。 (▲最常用) 指针变量定义简洁格式(符合标准C语言):所指变量类型 * 指针变量名 完整格式(keil特有):所指变量类型<所指变量存储器空间> * <指针变量存储器空间> 指针变量名 比如: char * Point; // 定义通用指针变量,跟标准C的定义方式一样。 unsigned char *cp1, *cp2; // 同上,cp1,cp2用于存放字符型变量在内存中的起始地址。 char xdata * Point; // 定义内存特殊指针,标准C不可以这样。 unsigned char xdata * data Point1; // unsigned char变量存储在xdata,指针变量本身存储在data。 说明: ①“*”表示该变量是指针变量,“*”与“指针变量名”之间一般不用空格,也可使用任意多个空格。 ② “ 所指变量类型”要与实际定义的变量类型一致,同时有无前缀unsigned也要与实际变量一致,两者之一不满足编译时都会有警告:warning C182: pointer to different objects (报告指针使用不一致)。 ③ <所指变量存储器空间>用于定义基于存储器的指针变量,也称为特殊指针变量,无此选项时,被定义为通用指针变量,这两种指针变量的区别在于它们的存储字节不同,通用指针变量与标准C语言兼容,在内存中固定占用3个字节,第一个字节存放指针变量所指变量的存储空间的编码(由编译时编译模式的值确定,见表2-9所示),第二和第三字节分别存放指针变量所指变量的高位和低位地址。 表2-9 通用指针变量本身占用3字节空间 地 址 | | | | | 存储器类型编码: 0x00—data/bdata/idata 0x01— xdata 0xFE— pdata 0xFF— code | | |
通用指针变量本身默认存储在内部数据存储器data里,如果想指定指针变量的存储位置,可以在 * 后加上指针变量存储空间说明,示例如下: char * data ptr; // 与char * ptr;等价,即默认的定义方式,存放在片内RAM(0~127字节)。 char * idataptr; // 指针变量存储在idata,内部RAM(0~255字节)。 char * xdataptr; // 指针变量存储在片外RAM,64k 地址范围。 定义的通用指针变量运行速度比特殊指针要稍微慢一点点,但使用更简单,也方便程序移植。
|