首页 理论教育 单片机C语言版:指针变量定义

单片机C语言版:指针变量定义

时间:2026-01-27 理论教育 小熊猫 版权反馈
【摘要】:指针变量的定义与一般变量的定义类似,其一般形式如下:数据类型[存储器类型1]*[存储器类型2]标识符;其中“标识符”是所定义的指针变量名。有“存储器类型1”选项,指针被定义为基于存储器的指针;无此选项时,被定义为一般指针。

指针变量的定义与一般变量的定义类似,其一般形式如下:

数据类型[存储器类型1]*[存储器类型2]标识符;

其中“标识符”是所定义的指针变量名。“数据类型”说明了该指针变量所指向的变量的类型。“存储器类型1”和“存储器类型2”是可选项,它是Keil Cx51编译器的一种扩展。

有“存储器类型1”选项,指针被定义为基于存储器的指针;无此选项时,被定义为一般指针。这两种指针的区别在于它们的存储字节不同。一般指针在内存中占用3个字节,第一个字节存放该指针存储器类型的编码(由编译时编译模式的默认值确定),第二个和第三个字节分别存放该指针的高位和低位地址偏移量。

“存储器类型2”选项用于指定指针本身的存储器空间。

一般指针可用于存取任何变量而不必考虑变量在51单片机存储器空间的位置,许多C51库函数采用了一般指针,函数可以利用一般指针来存取位于任何存储器空间的数据。

如果在定义一般指针时带有“存储器类型2”选项,则可指定一般指针本身的存储器空间位置,例如:

char*xdata strptr; //位于xdata空间的一般指针

int*data numptr; //位于data空间的一般指针

long*idata varptr; //位于idata空间的一般指针(https://www.xing528.com)

由于一般指针所指对象的存储器空间位置只有在运行期间才能确定,编译器在编译期间无法优化存储方式,必须生成一般代码以保证能对任意空间的对象进行存取,因此一般指针所产生的代码运行速度较慢,如果希望加快运行速度,则应采用基于存储器的指针。基于存储器的指针所指对象具有明确的存储器空间,长度可为1个字节(存储器类型为idata、data、pdata)或2个字节(存储器类型为code、xdata)。例如:

char data*str; //指向data空间char型数据的指针

int xdata*numtab; //指向xdata空间int型数据的指针

long code*powtab; //指向code空间long型数据的指针

与一般指针类似,若定义时带有“存储器类型2”选项,则可指定基于存储器的指针本身的存储器空间位置,例如:

char data*xdata str; //指向data空间char数据的指针,指针本身在xdata

int xdata*data numtab; //指向xdata空间int型数据的指针,指针本身在data

long code*idata powtab; //指向code空间long型数据的指针,指针本身在idata

基于存储器的指针长度比一般指针短,可以节省存储器空间,但它所指对象具有确定的存储器空间,缺乏灵活性。基于存储器指针主要的优点是可以显著地提高C51程序的运行速度。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈