关于C指针和数据类型的问题
关于C指针和数据类型的测试 收藏
今天看到如下一段代码:
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 0001,RecvBuff[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]的地址加一.
哪位高手能帮我解释下.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/apn172/archive/2009/07/16/4354456.aspx