7.5 C51的存储器指针

在C51语言中可以定义一般指针和存储器指针。对变量进行声明时可以指定变量的存储类型,在对指针变量声明的时候,也同样可以指定其存储类型。下面分别进行介绍。

7.5.1 一般指针

关于一般指针的定义,在数据结构一章指针一节已经作过详细的介绍,示例如下。


char*pc;//pc为一个指向char数据的指针,按默认存储模式存放

long*pl;//pl为指向long型整数的指针,按默认存储模式存放


一般指针可存放于任何存储器中,一般用3个字节进行存放。第1个字节为存储器类型,第2个字节为偏移量的高位,第3个字节为偏移量的低位。使用一般指针可以访问存放在存储器任何位置的数据而不用考虑其存储器类型,因此使用十分方便。一般指针访问不同存储区中数据的程序示例如下。


include<stdio.h>//头文件

include<reg51.h>

void main()//主函数

{

char*pc;//定义一般指针

int*pi;

long*pl;

char data dc=‘A’;//定义在data存储类型变量

int data di=12;

long data dl=1999;

char xdata xc=‘B’;//定义在xdata存储类型变量

int xdata xi=25;

long xdata xl=1970;

char code cc=‘C’;//定义在code存储类型变量

int code ci=37;

long code cl=1961;

pc=&dc;//一般指针访问data存储区

pi=&di;

pl=&dl;

printf(“%c%d%ld\n”,pc,pi,*pl);//输出结果

pc=&xc;//一般指针访问xdata存储区

pi=ξ

pl=&xl;

printf(“%c%d%ld\n”,pc,pi,*pl);//输出结果

pc=&cc;//一般指针访问code存储区

pi=&ci;

pl=&cl;

printf(“%c%d%ld\n”,pc,pi,*pl);//输出结果

}


该程序可以在KeilµVision3集成开发环境中运行,其运行结果如下。


A 12 1999

B 25 1970

C 37 1961


从本例中,可以看出一般指针可以访问单片机存储器中的data、xdata和code存储区。使用一般指针可以访问数据而不用考虑其存储器类型,因此使用起来十分方便、快捷。