类型强制转换符 与 + 符的优先级

【生活经历分享】华师国培 华师伴学 合同都是坑 消费者付款后无法退款
和华师国培签合同需小心,合同中都是保护华师的条款,没有保护消费者的条款。
收到钱,就算你因对培训质量不满意,也不能退款。因合同消费者维权肯定十分艰难。
华师伴学的授课方式是看录制的视频,不是真人现场教学。是否是您和孩子想要的学习方式?
各位打算报名的,交费要谨慎!
其他人在小红书上发的,转:

深圳市华师国培教育科技有限公司,黑心机构,大家擦亮眼睛,别被骗了,消费欺诈,虚假承诺,签合同各种坑,收到钱了不履行承诺不退款,乱扣费,维权艰难! - 小红书

 

移植 gcc 代码到 VS2008 时,犯了一个关于类型强制转换符 与 + 符的优先级错误。

共有的示例代码如下(也就是问题的条件):

1 char cArrayTest[10];  
2 unsigned short *pusTest = NULL;  
3 unsigned short *pusTest2 = NULL;  
4   
5 for(int i = 0;i < 10;i++)  
6 {  
7     cArrayTest[i] = i + 1;  

gcc 的原始代码如下示例:

1 pusTest = cArrayTest;  
2 pusTest2 = cArrayTest + 2;  

C 编译器对下面的两句可以正常编译。
VS2008 的编译器会报错,必须强制类型转换。

当时也未多考虑,直接在前面增加了强制类型转换符,修改后的代码如下:

1 pusTest = (unsigned short *)cArrayTest;  
2 pusTest2 = (unsigned short *)cArrayTest + 2;  

本来是 pusTest2 想取 cArrayTest 的第三和第四个字节来组成一个 unsigned short 的数值。
但实际上上面的代码 pusTest2 取得的是 cArrayTest 的第 5 和第 6 个字节所组成的 unsigned short 的数值。
由于 pusTest2 在后继的使用时比较隐蔽,代码又无法调试,所以导致出错问题后很久未发现问题的原因。

最后才怀疑到此句:

1 pusTest2 = (unsigned short *)cArrayTest + 2;  

查了一下,强制类型转换或的优先级果然高于 + 符。

1 pusTest2 = (unsigned short *)(cArrayTest + 2);   

才是想要的结果。

posted @ 2016-02-22 10:45  91program  阅读(1517)  评论(1)    收藏  举报