C51指针定义和应用小结(精)_第1页
C51指针定义和应用小结(精)_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要:一.指针变量的定义指针变量定义与一般变量的定义类似,其形式如下:数据类型*标识符;表示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指针的区别在于它们的存储字节不同。一般指针在内存.一. 指针变量的定义指针变量定义与一般变量的定义类似,其形式如下:数据类型存储器类型1*存储器类型2标识符;存储器类型1表示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指针的区别在于它们的存储字节不同。一般指针在内存中占用三个字节,第一个字节存放该指针存储器类型的编码(由编译时由编译模式的默认值确定),第二和第三字节分别存放该指针的高位和低位地址偏移量。存储器类型的编码值如下

2、:存储类型IIdata/data/bdataxdatapdataCode编码值0x000x010xFE0xFF存储类型2用于指定指针本身的存储器空间。1. char*c_ptr;int*i_ptr;long*l_ptr;上述定义的是一般指针,c_ptr指向的是一个char型变量,那么这个char型变量位于哪里呢?这和编译时由编译模式的默认值有关,如果MenoryModelVariableLarge:XDATA,那么这个char型变量位于xdata区:如果MenoryModelVariableCompact:PDATA,那么这个char型变量位于pdata区:如果MenoryModelVaria

3、bleSmall:DATA,那么这个char型变量位于data区。而指针c_ptr,i_ptr,l_ptr变量本身位于片内数据存储区中。2. char*datac_ptr;int*idatai_ptr;long*xdatal_ptr;上述定义,c_ptr,i_ptr,l_ptr变量本身分别位于data,idata,xdata区。3. chardata*c_ptr;表示指向的是data区中的char型变量,c_ptr在片内存储区中;intxdata*i_ptr;表示指向的是xdata区中的int型变量,i_ptr在片内存储区中;longcode*l_ptr;表示指向的是code区中的long型变

4、量,l_ptr在片内存储区中;4.chardata*datac_ptr;表示指向的是data区中的char型变量,c_ptr在片内存储区data中;Intxdata*idatai_ptr;表示指向的是xdata区中的int型变量,i_ptr在片外存储区xdata中;longcode*xdatal_ptr;表示指向的是code区中的long型变量,l_ptr在片内存储区xdata中;二. 指针应用1. intx,j;int*px,*py;px=&x;py=&y;2. *px=0;py=px;3. *px+<=>*(px+4. (*px+<=>x+5. un

5、signedcharxdata*x;unsingedcharxdata*y;x=0x0456;*x=0x34/等价于movdptr,#456h;mova,#34h;movxdptr,a6. unsignedcharpdata*x;x=0x045;*x=0x34/等价于movr0,#45h;mova,#34h;movxr0,a7. unsignedchardata*x;x=0x30;*x=0x34/等价于mova,#34h;mov30h,a8. int*px;px=(intxdata*0x4000;将xdata型指针0x4000赋给px,也就是将0x4000强制转换为指向xdata区中的int型

6、变量的指针,将其赋给px。9. intx;x=*(charxdata*0x4000;/将0x4000强制转换为指向xdata区中的int型变量的指针,从这个地址中取出值赋给变量x。10. px=*(intxdata*xdata*0x4000;/如何分析?11. px=*(intxdata*xdata*0x4000;将阴影部分遮盖,这个意思就是将0x4000强制转换为指向xdata区中的X型变量的指针,这个X型变量就是阴影“intxdata*",也就是0x4000指向的变量类型是一个指向xdata区中的int型变量的指针,即0x4000中放的是另外一个指针,这个指针指向的是xdata区

7、中的int型变量。Px值放的是0x4000中放的那个指针。比如【0x4000】一【0x2000】0x34。Px=0x2000。12. x=*(intxdata*xdata*0x4000;x中放着0x4000中放的那个指针所指向的值。比如【0x4000】一【0x200010x34。三. 指针与数组1.intarr10;int*pr;pr=arr;/等价于pr=&arr0;这样的话,*(pr+1=arr1;*(pr+2=arr2;*(arr+3=arr3;*(arr+4=arr4;或者pr0,pr1.代表arr0,arr1.可以*pr+(等价于*(pr+,来访问所有数组元素,W*arr+是

8、不行的。因为arr是常量,不能+运算2. char*s1charcodestr=”abcdefg”s1=str;3. char*s1=”abcdefg”;四. 指针与结构体1. typedefstruct_data_strunsignedintDATA110;unsignedintDATA210;unsignedintDATA310;unsignedintDATA410;unsignedintDATA510;unsignedintDATA610;unsignedintDATA710;unsignedintDATA810;DATA_STR;开辟一个外RAM空间,确保这个空间够装你所需要的xdat

9、aucharmy_dataMAX_STR_at_0x0000;DATA_STR*My_Str;My_Str=(DATA_STR*my_data;/把你的结构体指针指向这个数组的开头以后的操作就这样:My_Str->DATA10=xxx;My_Str->DATA11=xxx;那么你的变量就自然放到XDATA中去了.注意定义的my_dataMAX_STR,不能随便被操作,它只是开始的时候用来开辟内存用的.2. structstudentcharname20;intnum;stu1,stu2;3. structstudentcharname20;intnum;;structstudent

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论