C51指针小结
2012-10-22
济南大学机电实验室
标签: C51 指针

一. 指针变量的定义

指针变量定义与一般变量的定义类似,其形式如下:

数据类型 [存储器类型1] * [存储器类型2] 标识符;

[存储器类型1] 表示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指针的区别在于它们的存储字节不同。一般指针在内存中占用三个字节,第一个字节存放该指针存储器类型的编码(由编译时由编译模式的默认值确定),第二和第三字节分别存放该指针的高位和低位地址偏移量。存储器类型的编码值如下:

存储类型IIdata/data/bdataxdatapdataCode
编码值0x000x010xFE0xFF

[存储类型2]用于指定指针本身的存储器空间。

  • char * c_ptr; int * i_ptr; long * l_ptr;
  • char * data c_ptr; int * idata i_ptr; long * xdata l_ptr;
  • char data * c_ptr; //表示指向的是data区中的char型变量,c_ptr在片内存储区中;
  • char data * data c_ptr; //表示指向的是data区中的char型变量,c_ptr在片内存储区data中;
二. 指针应用
  • int x, j;
  • *px=0; py=px;
  • *px++<=>*(px++)
  • (*px)++<=>x++
  • unsigned char xdata * x;
  • unsigned char pdata * x;
  • unsigned char data * x;
  • int *px;
  • int x;
  • px=*((int xdata * xdata *)0x4000); //如何分析?
  • px=*((int xdata * xdata *)0x4000);将阴影部分遮盖,这个意思就是将0x4000强制转换为指向xdata区中的X型变量的指针,这个X型变量就是阴影“int xdata *”,也就是0x4000指向的变量类型是一个指向xdata区中的int型变量的指针,即0x4000中放的是另外一个指针,这个指针指向的是xdata区中的int型变量。Px值放的是0x4000中放的那个指针。比如【0x4000】—【0x2000】-0x34。Px=0x2000。
  • x=**((int xdata * xdata *)0x4000); x中放着0x4000中放的那个指针所指向的值。比如【0x4000】—【0x2000】-0x34。
三. 指针与数组
  • int arr[10];
  • char * s1
  • char *s1=”abcdefg”;
四. 指针与结构体
  • typedef struct _data_str {
  • struct student
  • struct student
  • struct student stu[10];
可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号