数据类型 *指针变量名;
其中,“*”说明其后的变量是指针变量,它指向一个由“数据类型”说明的变量。被指向变量和指针变量都位于C编译器默认的存储区中。例如:
int a=′A′;
int*P1=&a;
这表示P1是一个指向int型变量的指针变量,此时P1的值为int型变量a的地址,而a和P1两个变量都位于C编译器默认的内存区域中。
对于C51来讲,指针定义时还应包含指针变量自身位于那个存储区中及被指向变量位于那个存储区中的信息,故C51指针的一般定义形式为:
数据类型 [存储类型1] *[存储类型2] 指针变量名;
其中,“数据类型”是被指向变量的数据类型,如int型或char型等;“存储类型1”是被指向变量所在的存储区类型,如data、code、xdata等,缺省时根据该变量的定义语句确定。“存储类型2”是指针变量所在的存储区类型,如data、code、xdata等,缺省时根据C51编译模式的默认值确定;指针变量名可按C51变量名的规则选取。
下面举几个具体的例子(假定都是在SMALL编译模式下),说明C51指针定义的用法。
[例4.1]
char xdata a=′A′;
char*ptr=&a;
[解]在这个例子里,ptr是一个指向char型变量的指针变量,它本身位于SMALL编译模式默认的data存储区之内里,它的值是位于xdata存储区里的char型变量a的地址。
[例4.2](www.xing528.com)
char xdata a=′A′;
char*ptr=&a;
char idata b=′B′;
ptr=&b;
[解]在这个例子里,前两句与例4.1相同。而后两句里,由于变量b位于idata存储区中,所以当执行完ptr=&b之后,ptr的值是位于idata存储区里的char型变量b的地址。
从此可以看出,以char*ptr形式定义的指针变量,其数值既可以是位于xdata存储区的char型变量的地址,也可以是位于idata存储区的char型变量的地址,具体结果由赋值操作关系决定。
[例4.3]
char xdata a=′A′;
char xdata*ptr=&a;
[解]这里变量a是位于xdata存储区里的char型变量,而ptr是位于data存储区且固定指向xdata存储区的char型变量的指针变量,此时ptr的值为变量a的地址(不能像例4.2那样再将idata存储区的char型变量b的地址赋予ptr)。
[例4.4]
char xdata a=′A′;
char xdata*idata ptr=&a;
[解]此定义表示ptr是固定指向xdata存储区的char型变量的指针变量,它自身存放在idata存储区中,此时ptr的值位于xdata存储区中的char型变量a的地址。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。