一. 指针变量的定义
指针变量定义与一般变量的定义类似,其形式如下:
数据类型 [存储器类型1] * [存储器类型2] 标识符;
[存储器类型1] 表示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指针的区别在于它们的存储字节不同。一般指针在内存中占用三个字节,第一个字节存放该指针存储器类型的编码(由编译时由编译模式的默认值确定),第二和第三字节分别存放该指针的高位和低位地址偏移量。存储器类型的编码值如下:
存储类型I | Idata/data/bdata | xdata | pdata | Code |
编码值 | 0x00 | 0x01 | 0xFE | 0xFF |
[存储类型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];