关于C指针和数据类型的测试
2009-07-16 17:52
211 查看
今天看到如下一段代码:
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]的地址加一.
哪位高手能帮我解释下.
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]的地址加一.
哪位高手能帮我解释下.
相关文章推荐
- C语言中关于指针的数据类型和指针运算的小结
- 关于数据类型的简单测试
- 关于IplImage结构体内指针imageData指向的数据的数据类型的问题
- SQL server 2008 关于XML类型数据 功能总结及性能测试
- 关于内存和指针操作,数据类型转换本质的理解
- 关于void*类型指针的一些测试
- 一个关于指针+记录数据类型的使用技巧
- 一个关于JavaScript引用数据类型指针的小题
- 关于内存和指针操作,数据类型转换本质的理解
- 关于数据类型与指针的小笔记--初始化问题&&数组
- 关于内存和指针操作,数据类型转换本质的理解
- 关于C++指针类型所占大小的测试
- sizeof关于数组、指针、基本数据类型的使用
- SQL server 2008 关于XML类型数据 功能总结及性能测试
- 关于创建对象数组的引用数据类型空指针异常问题
- 关于int8_t,uint8_t.....等数据类型的问题
- 关于rtmp中数据类型为0x16的封包
- 关于VC数据类型及操作
- 关于jquery中ajax数据返回类型问题
- 关于mybatis读取数据库字段text类型时,读出数据为地址,并不是字符串的问题