您的位置:网站首页 > 电器维修资料网 > 正文 >
C51单片机指针的使用
来源: 日期:2013-11-16 22:05:28 人气:标签:
指针就是指变量或数据所在的存储区地址。如一个字符型的变量 str 存放在内存单元data 区的 51h 这个地址中,那么 data 区的 51h 地址就是变量 str 的指针。在 c 语言中指针是一个很重要的概念,正确有效的使用指针类型的数据,能更有效的表达复杂的数据 结构,能更有效的使用数组或变量,能方便直接的处理内存或其它存储区。指针之所以 能这么有效的操作数据,是因为无论程序的指令、常量、变量或特殊寄存器都要存放在内 存单元或相应的存储区中,这些存储区是按字节来划分的,每一个存储单元都能用唯一的 编号去读或写数据,这个编号就是常说的存储单元的地址,而读写这个编号的动作就叫做寻 址,通过寻址就能访问到存储区中的任一个能访问的单元,而这个功能是变量或数组等 是不可能代替的。c 语言也因此引入了指针类型的数据类型,专门用来确定其他类型数据的 地址。用一个变量来存放另一个变量的地址,那么用来存放变量地址的变量称为“指针变量”。 如用变量 strip 来存放文章开头的 str 变量的地址 51h,变量 strip 就是指针变量。下面 用一个图表来说明变量的指针和指针变量两个不一样的概念。
变量的指针就是变量的地址,用取地址运算符‘&’取得赋给指针变量。&str 就是把 变量 str 的地址取得。用语句 strip = &str 就能把所取得的 str 指针存放在 strip 指 针变量中。strip 的值就变为 51h。可见指针变量的内容是另一个变量的地址,地址所属的 变量称为指针变量所指向的变量。
要访问变量 str 除了能用‘str’这个变量名来访问之外,还能用变量地址来访 问。方法是先用&str 取变量地址并赋于 strip 指针变量,然后就能用*strip 来对 str 进行访问了。‘*’是指针运算符,用它能取得指针变量所指向的地址的值。在上图中指针 变量 strip 所指向的地址是 51h,而 51h 中的值是 40h,那么*strip 所得的值就是 40h。 使用指针变量之前也和使用其它类型的变量那样要求先定义变量,而且形式也相类似,
一般的形式如下:
数据类型 [存储器类型] * 变量名;
unsigned char xdata *pi //指针会占用二字节,指针自身存放在编译器默认存储区,指
向 xdata 存储区的 char 类型
unsigned char xdata * data pi; //除指针自身指定在 data 区,其它同上
int * pi; //定义为一般指针,指针自身存放在编译器默认存储区,占三个字节 在定义形式中“数据类型”是指所定义的指针变量所指向的变量的类型。“存储器类型”是编译器编译时的一种扩展标识,它是可选的。在没有“存储器类型”选项时,则定义为一般指针,如有“存储器类型”选项时则定义为基于存储器的指针。限于 51 芯片的寻址范围,指针变量 大的值为 0xffff,这样就决定了一般指针在内存会占用 3 个字节,第一字节存 放该指针存储器类型编码,后两个则存放该指针的高低位址。而基于存储器的指针因为不用 识别存储器类型所以会占一或二个字节,idata,data,pdata 存储器指针占一个字节,code,xdata 则会占二个字节。由上可知,明确的定义指针,能节省存储器的开销,这在严格要求程序 体积的项目中很有用处。
指针的使用方法很多,限于篇幅以上只能对它做一些基础的介绍。下面用在讲述常量时的例程改动一下,用以说明指针的基本使用方法。
- 1
- 2
- 下一页
【看看这篇文章在百度的收录情况】
相关文章
- 上一篇: C51单片机数组的使用
- 下一篇: C51HEX单片机文件的生成和单片机 小系统