单片机C语言xdata和data,unsigned char xdata *p;和xdata unsigned char *p区别

博客探讨了C语言指针中xdata和data存储类型的差异,解释了`unsigned char xdata *p;`与`xdata unsigned char *p;`的不同含义,并通过示例程序展示了指针分配的存储位置。文章强调,`xdata unsigned char *p;`等同于`unsigned char * xdata p;`,因为最前面的存储类型修饰最后面的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言指针说明以 * 为分隔符,

“*” 前面的存储类型修饰—指针所指向的对象数据的存储位置;

“*” 后面的存储类型修饰—指针本身所分配的存储位置。

所以unsigned char xdata *p; 和xdata unsigned char *p   不一样。说明的是2回事。

而:

xdata unsigned char *p; 和 unsigned char  * xdata p; 完全一样。

因为C写法中允许“最前面的存储类型修饰符修饰最后面的对象。”

且看下面示例程序证明:

; unsigned char xdata * p0;

;

; xdata unsigned char * p1 ;

;

; uchar  a=0x20;

;

; void main()

;{

;  p0=&a;

;  p1=&a;

;}

NAME    POINTER

?PR?main?POINTER     SEGMENT CODE

?C_INITSEG           SEGMENT CODE

?DT?POINTER          SEGMENT DATA

?XD?POINTER          SEGMENT XDATA

EXTRN    CODE (?C_STARTUP)

PUBLIC    a?

PUBLIC    p1

PUBLIC    p0

PUBLIC    main

RSEG  ?DT?POINTER

p0:   DS   2       //p0指针被定义在data区。

a?:   DS   1

RSEG  ?XD?POINTER

p1:   DS   3     //p1指针被定义到到xdata区。

RSEG  ?C_INITSEG

DB    001H

DB    a?

DB    020H

; #pragma  src

;

;

RSEG  ?PR?main?POINTER

main:

; SOURCE LINE # 11

; {

; SOURCE LINE # 12

;

; p0=&a;

; SOURCE LINE # 14

MOV      p0,#HIGH (a?)

MOV      p0+01H,#LOW (a?)      //p0-2字节指针立即寻址

; p1=&a;

; SOURCE LINE # 15

MOV      DPTR,#p1

CLR      A

MOVX     @DPTR,A

INC      DPTR

MOV      A,#HIGH (a?)

MOVX     @DPTR,A

INC      DPTR

MOV      A,#LOW (a?)

MOVX     @DPTR,A        //p1-3字节通用指针间接寻址。

;

; }

; SOURCE LINE # 17

RET

; END OF main

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值