指针不完全手册

指针不完全手册

第一节 指针基本概念
1、指针定义:c语言的一种基本数据类型,地位等同于char ,int,*等;这种数据类型的变
量总是存放一个内存单元地址。
2、指针的特性:指针具有指向性,即指向某一数据实体。
3、指针变量:用指针数据类型定义的变量,其内容总是一个内存单元地址或NULL。指针变
量本身也占有一定的内存单元,占几个字节跟此指针变量的类型有关,最多3字节,最少1字
节。若此变量存放A数据实体的内存单元地址,我们称此指针变量指向A数据实体
4、指针变量的三个要素:⑴、所指的对象类型、⑵、对象位于的存储空间、⑶、指针变量
自己位于的存储空间;
每一指针总具有这三个要素,只不过有的要素明确定义决定,有的要素隐含定义决定,有的
要素程序运行时才决定。
5、指针变量的类型:
根据三要素定义与否指针可分为三种类型:一般指针、基于存储器指针、抽象指针,其中要
素3不影响指针类型,只影响指针变量本身存储区域。
①、一般指针(Generic Pointers):要素1明确定义的,要素2未定义;同标准C语言的指
针。
此类指针变量总占3个字节,第一字节表明所指对象的存储器类型(对象位于的存储空
间),存储器类型编码(第一字节内容)0x00—idata/data/bdata;0x01—xdata;0xfe—
pdata;0xff—code;第二字节存放所指对象的内存单元地址的高位字节,第三字节存放所指
对象的内存单元地址的低位字节。
程序运行时,才能决定他指向哪个存储区域的对象;因此可以访问8052的所有存储空间。定
义好之后未使用之前,他不指向任何单元,使用时赋给他xdata的地址它就指向xdata区的对
象(二三字节均为有效值),赋给他data的地址它就指向data区的对象(二字节为00,三字节
为有效值)。
例:char *p; //定义
char xdata x;
int data y;
p = &x; //p 指向 xdata 区
p = (char *)&y //p 指向 data区 ,&y指向整数,所指对象类型不同,必须强制转
换,
②、基于存储器指针(Memory-specific pointers)要素1、2明确定义的;属keil的扩展定
义,我们比较常用。
此类指针变量占1-2个字节,均存放所指对象的内存单元地址。基于idata/data/pdata时占1
字节,基于xdata/code时占2字节。
所指对象的存储区域是编译期间决定的,程序运行期间不会改变,因此生成代码短于一般指
针,运行速度较快,但应用缺乏灵活性。
例:char xdata *p; //定义
char xdata x;
int data y;
p = &x; //p 指向 xdata 区
p = (char *)&y //p 还指向 xdata区 &y指向整数,所指对象类型不同,必须强制
转换,
③、抽象指针(Abstract pointer)要素1、2未明确定义的指针或一个具体数值;我们不常
用。
此类指针所指对象的类型及对象的存储空间都是NULL。
此类指针一般用来产生绝对调用或用来访问某存储区域的任意绝对地址。使用时一般是把抽
象指针强制类型转换为别的类型指针。
例:void *p; //抽象指针定义
char xdata

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值