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