我從零開始學習C++,因此我沒有對C的專家理解。在C++中,您不能將無效指針指向任何內容,並且我理解其背後的原因。不過,我知道在C中,你可以。這有什麼可能的原因?這看起來好像是一個類型安全的巨大漏洞,對我來說這似乎是一件壞事。鑄造空指針的原因是什麼?
6
A
回答
13
您可以將void*
投射到另一個這兩個語言的指針上。也許你的含義是含蓄的。
在C中非常方便,無需對其進行明確說明。在C++中,我們有模板,所以要編寫通用代碼,不需要void*
強制轉換等等。在C中沒有選擇。通用容器必須將void*
保存爲對象,並且重複說mydata* d = node;
然後它是mydata* d = (mydata*)node;
要容易得多。
所以,這幾乎就像你說的。在C類中,安全性一般沒有像在C++中那樣受到重視,特別是當它涉及到void*
時,因爲它被假設爲一個簡單的通用指針。在C++中沒有必要這麼做,所以在處理它時最好明確。
0
原因之一:如果您使用sort
對結構數組進行排序,並且您有兩個結構的比較函數,則需要將空指針轉換爲指向結構成員的結構的指針。
1
什麼是[用C鑄造
void *
指針]可能的原因是什麼?這是不是類型安全的巨大漏洞?
這是支持多態的唯一可能的方式,也就是通用編程。沒有其他的方法可以製作,例如一個通用的散列表。 C中的多態性是非常不安全的,但它是唯一的多態現象。
很高興C++具有參數多態性(模板的許多功能之一)。
相關問題
- 1. 是什麼原因造成我的空指針異常
- 2. 鑄造空指針
- 3. 鑄造空指針
- 4. 鑄造虛空指針
- 5. C函數指針鑄造空指針
- 6. CyclicBarrier.await()函數產生空指針異常的原因是什麼
- 7. 空指針異常的原因是什麼
- 8. 空指針的原因
- 9. 鑄造指針intl
- 10. C,鑄造通過/空指針
- 11. V8 - 鑄造args.Data()返回空指針
- 12. 鑄造空指針跨越DLL
- 13. CreateIndexBuffer()崩潰,某種指針錯誤。可能是什麼原因造成的?
- 14. 在這段代碼中,可能是空指針異常的原因是什麼?
- 15. 指針 - 鑄造結構指針+ Malloc
- 16. 鑄造指針警告
- 17. C指針類型鑄造
- 18. 函數指針鑄造
- 19. 德爾福指針鑄造
- 20. 鑄造和添加指針
- 21. 鑄造指針浮動
- 22. 鑄造指針警告
- 23. 鑄造字符指針長
- 24. 鑄造8位長指針
- 25. 空指針異常的原因
- 26. 型鑄造的指針調用構造
- 27. 爲什麼指針算術是段錯誤的原因?
- 28. 指針升級問題的原因是什麼?
- 29. 這個指針衝突的原因是什麼?
- 30. 是什麼原因造成process.hrtime()掛在
很好的回答,謝謝! – Maulrus 2010-04-07 06:25:52