《(6.2)--3.3 C51指针单片机原理与应用.ppt》由会员分享,可在线阅读,更多相关《(6.2)--3.3 C51指针单片机原理与应用.ppt(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机单片机的的C51C51基础知识基础知识第三章第三章第第 节节3.3 3.3 C51C51的的指针指针3 3C51C51的指针的指针 C51C51的的指针指针 1.“直接访问直接访问”方式:直接按变量进行的直接按变量进行的访问访问 在程序中定义一个变量,对程序编译时系统给这个变量预留存储单元,此时变量名已转化为存储单元地址。程序运行时,通过地址就能对存储单元进行访问了。2.“间接访问间接访问”方式:先将被访问变量的地址存放在另一个变量中,然后利用该变量中的被访问变量的地址,去访问该地址对应的存储单元。用来存放变量地址的变量,称作“指针变量指针变量”存放的地址称为“指针指针”实例实例9试分析
2、下面程序段的作用。解题分析解题分析:第第1句句:按普通变量定义方法定义了一个整型变量a;第第2句句:定义了一个指向整型变量的指针变量。式中*是指针声明符,表示后面的变量是指针变量(不是普通变量),指针变量名是a_pointer(不是*a_pointer);1 int a1 int a;2 int *2 int *a_pointer;a_pointer;3 a_pointer3 a_pointer=&a;=&a;4*a 4*a pointer=133;pointer=133;C51的指针指针指针第3句:将被指向变量a的地址装入指针变量a_pointer中。式中&是取地址运算符,可以取得变量a的地
3、址编码;第4句:将数字常量133赋给指针变量a_pointer所指向的变量,即变量a。因此,该程序段的作用:采用采用指针的间接方式将数字常量指针的间接方式将数字常量133133赋给整型变量赋给整型变量a a几点需要注意:程序段中两次用到的*a_pointer是有不同含义的。第一次是定义指针变量,第二次是表示指针变量所指向的变量,此时*a_pointer与a是等价的。在定义指针变量时必须指定它所指向变量的数据类型,这是因为,如果想通过指针访问一个变量,只知道该变量的地址是不够的,只有知道了变量的数据类型,才能结合变量地址完整地取出该数据。可以把第1和第2合并成一句,在定义被指向变量和指针变量的同
4、时进行初始化,如:int*a_pointer=&a;C51C51的指的指针实例实例10假设编译器为变量a分配的存储单元首地址为1000,试指出下面程序段执行后指针变量ptr中的值是多少?解题分析解题分析:根据题意,a是一个具有4字节的长整型变量,指针变量ptr最初装入的指针值为1000。当执行一次ptr+后,指针会移动到下一个长整数位置,即指向1004。1 long a1 long a;2 long*ptr=&a;2 long*ptr=&a;3 ptr 3+3 ptr 3+C51的指针上述指针概念是针对标准C语言的,对于51单片机还需要解决多种存储区域(如data,idata,xdata等)带
5、来的相关问题。对于C51来讲,指针变量定义还应该包括以下信息:1、指针变量自身位于哪个存储区中?、指针变量自身位于哪个存储区中?2、被指向变量位于哪个存储区中、被指向变量位于哪个存储区中?所以C51指针变量定义的一般形式为:数据类型数据类型存储类型存储类型1*存储类型存储类型2变量名变量名;C51的指针数据类型数据类型是被指向变量的数据类型,如char、int、long等;存储存储类型类型1是指被指向变量所在的存储类型,如data,code,xdata等,缺省时根据被指向变量的定义语句确定;存储存储类型类型2是指针变量所在的存储类型,如data,code,xdata等缺省时根据C51编译模式的
6、默认值确定;指针指针变量名变量名可按C51变量名的规则选取。C51的指针例如,已知当前编译模式为Small,若采用以下变量和指针的定义:charxdataa=A;charxdata*ptr=&a;根据C51指针规则可知,这里变量a是位于xdata存储区里的char型变量,而ptr是位于data存储区存储区且固定指向xdata存储区存储区的char型变量的指针变量。C51的指针若采用如下定义:charxdataa=A;charxdata*idataptr=&a;这里表示ptr是固定指向xdata存储区的char型变量的指针变量,它自身存放在idata存储区中,此时ptr的值为位于xdata存储区中的char型变量a的地址。C51的指针 关于关于C51C51的指针讲的指针讲到到这里,这里,同同学们学们再见再见