现在的位置: 首页 > 综合 > 正文

关于C指针和数据类型的测试

2013年09月17日 ⁄ 综合 ⁄ 共 583字 ⁄ 字号 评论关闭

今天看到如下一段代码:

getforsecond(&pIec104->T3StartSec);

        HimRecvSerial=(*(USHORT *)&RecvBuff[4])>>1;//RecvBuff[5]RecvBuff[4]右移

        pIec104->HasAckSend=HimRecvSerial;

        if(pIec104->HasAckSend == pIec104->SendSerial)

        {

            pIec104->bT1Open=FALSE;

        }

 

比如RecvBuff[5]=0010 0001RecvBuff[4]=0000 0010

如上函数操作后结果为 HimRecvSerial 0001 0000 1000 0001

感到很迷惑,写程测试后发现确是如此.

RecvBuff为UCHAR型数组,HimRecvSerial 为USHORT类型数据,

&RecvBuff[4],是取一个UCHAR变量的地址,

(USHORT *)&RecvBuff[4]是将UCHAR指针强制转换为USHORT 类型的指针.

之前我都是比较明白的 我不明白为什么然后再加*取其内容后就能将RecvBuff[5]的内容取过来

我测试的时候发现RecvBuff[5]的地址为RecvBuff[4]的地址加一.

哪位高手能帮我解释下.

 

抱歉!评论已关闭.