David的测试技术空间,收藏好文档和分享我的技术理解。5年的数通产品测试和安全产品测试经验,3年Web产品测试和多年测试管理和测试工具开发经验。目前关注性能分析调优、Jmeter和TestNG+WebDriver+Hamcrest的培训推广。Welcome沟通交流,请留言或者发邮件到daviwang_2004 at soguo.com。

C中的指针强制转换问题

上一篇 / 下一篇  2007-11-26 10:20:11

http://topic.csdn.net/t/20061110/16/5148811.html

从CSDN上找到的资料,解决了我很久以来的一个疑问

问题源:

C++的这种风格的代码是什么意思?是指针的强制类型转换吗?   
有什么好处?会不会有什么风险?     
Subscrīption   *subscrīption   =   (Subscrīption   *)   event->data_;  

3 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-11-10 16:16:15 得分 30

是指针的强制类型转换。  
  危险是:你必须明确知道data_里放的数据确实是Subscrīption类型的。  
  好处?没好处,是迫不得已。当你从消息队列或者socket收数据时,收到的都是无类型的一堆2进制字节流,你只能进行强制类型转换,然后才能操作它

7 楼goodluckyxl(被人遗忘的狗)回复于 2006-11-10 16:23:56 得分 30

C++的这种风格的代码是什么意思?是指针的强制类型转换吗?  
  有什么好处?会不会有什么风险?  
   
  没什么意思,这个只是沿用c语言得强转路线  
  是指针得强转  
  好处就是在内存分布一致得情况下,直接强转可以得到正确得成员数据  
  会有风险,如果说这个结构存在复杂内存分布,不一定以成员作为第一偏移得话  
  就转出错误数据    

22 楼flyingbug(Effective Refactoring)回复于 2006-11-10 17:35:04 得分 0

刚才看了c的内存布局和内存对齐问题,据那上面的说法,c标准并没有规定struct在内存中是否是连续分布的,但是规定了声明顺序等同于内存中的顺序,不同的平台上对齐的标准也不一样  
   
  那么,我们用socket传送对象或结构的时候,将一个对象转换成字符流,究竟改遵循什么原则呢?把各个成员按照声明顺序转成char数组然后拼在一起?


TAG:

 

评分:0

我来说两句

Open Toolbar