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

下载本文档

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

文档简介

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 Model Variable Large:XDATA, 那么这个 char 型变量位于 xdata 区: 如果 Menory Model Variable Co

3、mpact:PDATA, 那么这个 char 型变量位于 pdata 区: 如果 Menory Model Variable Small: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 区中的 c

4、har 型变量, c_ptr 在片内存储区中;int xdata * i_ptr; / 表示指向的是 xdata 区中的 int 型变量, 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 co

5、de * xdata l_ptr; / 表示指向的是 code 区中的 long 型变量, l_ptr 在片内存储区 xdata 中;二. 指针应用1. int x, j;int * px, *py;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,a6. unsigned char pdata * x;x=0x045;

6、*x=0x34 / 等价于 mov r0,#45h ; mov a,#34h; movx r0,a7. unsigned char data * x;x=0x30;*x=0x34 / 等价于 mov a,#34h; mov 30h ,a8. int *px;px=(int xdata *0x4000; /将 xdata 型指针 0x4000 赋给 px, 也就是将 0x4000 强制转换为指向xdata 区中的 int 型变量的指针,将其赋给 px 。9. int x ;x=*(char xdata *0x4000; / 将 0x4000 强制转换为指向 xdata 区中的 int 型变量的指

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

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

9、的。因为 arr 是常量,不 能 + 运算2. char * s1char code str=” abcdefg ”s1=str;3. char *s1= ” abcdefg ”;四. 指针与结构体1. typedef struct _data_str unsigned int DATA110;unsigned int DATA210;unsigned int DATA310;unsigned int DATA410;unsigned int DATA510;unsigned int DATA610;unsigned int DATA710;unsigned int DATA810;DATA_

10、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 ;;struc

温馨提示

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

评论

0/150

提交评论