-
摘要
:
一
.
指针变量的定义指针变量定义与
一般变量的定义类似,其形式如下:数据类型
*
标
识符;
表
示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指针的区
别在于
它们的存储字节不同。一般指针在内存
...
一
.
指针变量的定义
< br>指针
变量定义与一般变量的定义类似,其形式如下:
数据类型
[
存储器类型
1] *
[
存储器类型
2]
标识符;
[
存储器类型
1]
< br>表示被定义为基于存储器的指针,无此选项时,被定义为一般指针。这两种指
针的
区别在于它们的存储字节不同。一般指针在内存中占用三个字节,第一个字节存放该指针
存储器类型的编码(由编译时由编译模式的默认值确定),第二和第三字节分别存放该指针的
高位和低位地址偏移量。存储器类型的编码值如下:
存储类型
I
Idata/data/bdata
xdata
pdata
Code
编码值
0x00
0x01
0xFE
0xFF
[
存储类型
2]
用于指定指针本身的存储器空间。
1.
char * c_ptr; int *
i_ptr; long * l_ptr;
上述定义的是
一般指针,
c_ptr
指向的是一个
c
har
型变量,那么这个
char
型变
量位于哪里
呢?这和编译时由编译模式的默认值有关,
如果
Menory Model
p>
—
Variable
—
Large:XDATA,
那么这个
char
型变量位于
xdata
区:
如果
Menory Model
p>
—
Variable
—
Compact:PDATA,
那么这个
char
型变量位于
pdata
区:
如果
Menory Model
——<
/p>
Variable
——
Small:DA
TA
,那么这个
char
型变量位于<
/p>
data
区。
而指针
c_ptr
,
< br> 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; //
表示指向的是<
/p>
data
区中的
char
型变量,
c_ptr
在片内存储区中;
int xdata * i_ptr; //<
/p>
表示指向的是
xdata
区中的
int
型变量,
i_ptr
在片内存储区中;
long code * l_ptr; //
表示指向的是
code
区中的
long
型变量,
l_ptr
在片内
存储区中;
4.
char data * data c_ptr; //
表示
指向的是
data
区中的
char
p>
型变量,
c_ptr
在片内存储区
data
中;
Int xdata * idata i_ptr; //
表
示指向的是
xdata
区中的
int<
/p>
型变量,
i_ptr
在片外存储区
xdata
中;
long code * xdata l_ptr; //
表
示指向的是
code
区中的
long<
/p>
型变量,
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,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 //
等价于
mov
a,#34h; mov 30h ,a
8.
int *px;
px=(int
xdata *0x4000; //
将
xdata
型指针
0x4000
赋给
px,
也就是将
0x4000
强制转换为指向
xdata
区中的
int
型变量的指针,将其赋给
px
。
-
-
-
-
-
-
-
-
-
上一篇:IQC来料检验指导书
下一篇:1553B总线测试分析系统.doc