C指针类型铸造
回答
假设你原来的代码是正确的,相应的分配是这样的:
*((zend_long*)*ptr) = *(ISC_LONG*)var->sqldata;
它的作品,非常感谢! – Marcodor
由于严格的别名违规,这很可能会调用未定义的行为。除非'zend_long'碰巧与'ISC_LONG'类型兼容。 – Lundin
@Lundin没错。这就是为什么我写道,只有原始代码是正确的,以上才有效。 – dasblinkenlight
指针类型转换像这些都不是C-良好定义的行为,除非这两个结构发生兼容类型。也就是说,他们必须以相同的顺序拥有相同的成员。
如果他们没有这一点,那么不幸的是没有简单的方法C.做到这一点如果你以某种方式设法得到它的“工作”,它仅仅是运气不好 - 你的代码可能随时崩溃由于未定义的行为。
这是因为这样的演员违反了所谓的strict aliasing rule。例如,您必须通过将结构包装到联合类型中来躲避该规则。
- 1. 类和指针的C++类型铸造
- 2. 类型铸造指针在C
- 3. 类型铸造指针解除引用
- 4. C函数指针铸造空指针
- 5. C++类型铸造指向常量变量的指针
- 6. 类型铸造字符指针指向整数指针
- 7. 型铸造的指针调用构造
- 8. 在C中铸造vs指定类型#
- 9. 铸造空指针
- 10. 铸造指针intl
- 11. 铸造空指针
- 12. Objective C铸造类结构指针指向具体类
- 13. C指针铸造:单个int指针双字符指针
- 14. 铸造的指针的整型常量
- 15. C,铸造通过/空指针
- 16. 指针铸造和使用C
- 17. 铸造指针对象为void *在C++
- 18. 函数指针在C++中铸造
- 19. 简单的C++指针铸造
- 20. C#铸造通用类型
- 21. 类型铸造在c#.net
- 22. c中的类型铸造#
- 23. 类型铸造在objective-c
- 24. cin类型铸造(C++)
- 25. 指针 - 铸造结构指针+ Malloc
- 26. 铸造指针警告
- 27. 函数指针铸造
- 28. 德尔福指针铸造
- 29. 铸造和添加指针
- 30. 铸造指针浮动
'ptr'的类型??? –
它作为一个funstion参数:“char ** ptr” 实际上它只是一个存储缓冲区 – Marcodor
除非它们是_compatible types_,否则会调用未定义的行为。 – Olaf