C51指针定义和应用小结_第1页
C51指针定义和应用小结_第2页
C51指针定义和应用小结_第3页
C51指针定义和应用小结_第4页
C51指针定义和应用小结_第5页
全文预览已结束

下载本文档

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

文档简介

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

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

3、ta 区:如果Menory ModelVariableSmall:DATA,那么这个char型变量位于data区。而指针c_ptr, i_ptr, l_ptr变量本身位于片内数据存储区中。 2. char * data c_ptr; int * idata i_ptr; long * xdata l_ptr;上述定义,c_ptr, i_ptr, l_ptr变量本身分别位于data ,idata,xdata区。 3. char data * c_ptr; /表示指向的是data区中的char型变量,c_ptr在片内存储区中;int xdata * i_ptr; /表示指向的是xdata区中的in

4、t型变量,i_ptr在片内存储区中;long code * l_ptr; /表示指向的是code区中的long型变量,l_ptr在片内存储区中; 4. char data * data c_ptr; /表示指向的是data区中的char型变量,c_ptr在片内存储区data中;Int xdata * idata i_ptr; /表示指向的是xdata区中的int型变量,i_ptr在片外存储区xdata中;long code * xdata l_ptr; /表示指向的是code区中的long型变量,l_ptr在片内存储区xdata中;二. 指针应用1. int x, j;int * px, *p

5、y;px=&x; py=&y; 2. *px=0; py=px; 3. *px+*(px+ 4. (*px+x+ 5. unsigned char xdata * x;unsinged char xdata * y;x=0x0456;*x=0x34 /等价于 mov dptr,#456h ; mov a,#34h; movx dptr,a 6. unsigned char pdata * x;x=0x045;*x=0x34 /等价于 mov r0,#45h ; mov a,#34h; movx r0,a 7. unsigned char data * x;x=0x30;*x=0x34 /等价于

6、 mov a,#34h; mov 30h ,a 8. int *px;px=(int xdata *0x4000; /将 xdata 型指针 0x4000 赋给 px,也就是将0x4000强制转换为指向xdata区中的int型变量的指针,将其赋给px。 9. int x;x=*(char xdata *0x4000; /将0x4000强制转换为指向xdata区中的int型变量的指针,从这个地址中取出值赋给变量x。 10. px=*(int xdata * xdata *0x4000; /如何分析? 11. px=*(int xdata * xdata *0x4000;将阴影部分遮盖,这个意思就

7、是将0x4000强制转换为指向xdata区中的X型变量的指针,这个X型变量就是阴影“int xdata *”,也就是0x4000指向的变量类型是一个指向xdata区中的int型变量的指针,即0x4000中放的是另外一个指针,这个指针指向的是xdata区中的int型变量。Px值放的是0x4000中放的那个指针。比如【0x4000】【0x2000】0x34。Px0x2000。 12. x=*(int xdata * xdata *0x4000; x中放着0x4000中放的那个指针所指向的值。比如【0x4000】【0x2000】0x34。三. 指针与数组1. int arr10;int * pr;p

8、r=arr; / 等价于pr&arr0;这样的话,*(pr+1=arr1; *(pr+2=arr2; *(arr+3=arr3; *(arr+4=arr4;或者 pr0,pr1.代表 arr0,arr1.可以*pr+ (等价于*(pr+,来访问所有数组元素,而*arr+是不行的。因为arr是常量,不能+运算 2. char * s1char code str=”abcdefg”s1=str; 3. char *s1=”abcdefg”;四. 指针与结构体1. typedef struct _data_str unsigned int DATA110;unsigned int DATA210;u

9、nsigned int DATA310;unsigned int DATA410;unsigned int DATA510;unsigned int DATA610;unsigned int DATA710;unsigned int DATA810;DATA_STR;/开辟一个外RAM空间,确保这个空间够装你所需要的xdata uchar my_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. struct studentchar name20;int num;stu1,stu2; 3. struct studentchar name20;int num;;struct stude

温馨提示

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

评论

0/150

提交评论