मैं स्क्रैच से सी ++ सीख रहा हूं, और इस तरह मेरे पास सी ++ में सी की विशेषज्ञ समझ नहीं है, आप जो कुछ भी शून्य सूचक नहीं डाल सकते हैं, और मैं इसके पीछे कारणों को समझता हूं। हालांकि, मुझे पता है कि सी में, आप कर सकते हैं। इसके लिए संभावित कारण क्या हैं? ऐसा लगता है कि यह प्रकार की सुरक्षा में एक बड़ा छेद है, जो (मेरे लिए) एक बुरी चीज की तरह लगता है।शून्य पॉइंटर कास्टिंग करने के क्या कारण हैं?
उत्तर
आप दोनों भाषाओं में एक अन्य सूचक में डाल सकते हैं। शायद आप अंतर्निहित मतलब था।
सी में यह बहुत सुविधाजनक है कि इसके बारे में स्पष्ट नहीं होना चाहिए। सी ++ में हमारे पास टेम्पलेट्स हैं, इसलिए जेनेरिक कोड लिखने के लिए void*
कास्टिंग और व्हाट्नॉट की आवश्यकता नहीं है। सी में कोई विकल्प नहीं है। एक सामान्य कंटेनर को ऑब्जेक्ट्स में void*
रखना होता है, और mydata* d = node;
बार-बार कहना बहुत आसान होता है तो यह mydata* d = (mydata*)node;
है।
तो यह आपके जैसा कहा गया है। सामान्य रूप से सी प्रकार की सुरक्षा में सी ++ में जितना जोर दिया गया था, विशेष रूप से जब यह void*
पर आया क्योंकि यह किसी भी चीज़ के लिए एक सामान्य जेनेरिक पॉइंटर होने का अनुमान लगाया गया था। सी ++ में इसकी कोई आवश्यकता नहीं है, इसलिए जब आप इससे निपट रहे हों तो बेहतर इसे स्पष्ट करें।
एक कारण: यदि आप structs की सरणी को सॉर्ट करने के लिए sort
का उपयोग करते हैं, और आपके पास दो structs के लिए तुलनात्मक फ़ंक्शन है, तो आपको संरचना के सदस्यों तक पहुंचने के लिए पॉइंटर्स को पॉइंटर्स को पॉइंटर्स पर डालना होगा।
[
void *
सी में पॉइंटर कास्टिंग] के संभावित कारण क्या हैं? क्या यह सुरक्षा सुरक्षा में एक विशाल छेद नहीं है?
पॉलिमॉर्फिज्म, उर्फ जेनेरिक प्रोग्रामिंग का समर्थन करने का यह एकमात्र संभव तरीका है। बनाने के लिए कोई और तरीका नहीं है, उदाहरण के लिए, एक सामान्य हैश तालिका। सी में पॉलिमॉर्फिज्म जंगली रूप से असुरक्षित है, लेकिन यह एकमात्र बहुरूपता है।
खुश रहें कि सी ++ में पैरामीट्रिक पॉलिमॉर्फिज्म (टेम्पलेट्स के कई कार्यों में से एक है)।
- 1. कास्टिंग सदस्य फ़ंक्शन पॉइंटर
- 2. क्या यह एक शून्य * पॉइंटर
- 3. कास्टिंग फ़ंक्शन शून्य
- 4. शून्य के माध्यम से कास्टिंग * बजाय
- 5. सी ++ टाइपकास्ट: शून्य पॉइंटर से क्लास पॉइंटर
- 6. शून्य को कास्टिंग चेतावनी_unused_result त्रुटि
- 7. एक शून्य पॉइंटर का उपयोग कब करें?
- 8. क्या कारण है "एनएसएसकेनर: शून्य स्ट्रिंग तर्क"?
- 9. क्या जावा पॉइंटर परमाणु लिखते हैं?
- 10. क्या ArrayLists पर Arrays पसंद करने के कारण हैं?
- 11. समस्याएं कास्टिंग नेन int करने के लिए
- 12. एक्शनस्क्रिप्ट: क्या 'कास्टिंग' का उपयोग करने का कोई अच्छा कारण है?
- 13. गोलांग त्रुटि में एक पॉइंटर से पॉइंटर प्रकार में दूसरे कास्टिंग
- 14. एक संरचना के लिए एक शून्य सूचक कास्टिंग
- 15. शून्य की तुलना करते समय ऑब्जेक्ट कास्टिंग क्यों करें?
- 16. पॉइंटर रिसीवर के लिए असंगत शून्य (गो बग?)
- 17. हटाएं बनाम ऑपरेटर हटाएं (और शून्य पॉइंटर)
- 18. शून्य * और शून्य ** के बीच क्या अंतर है?
- 19. गतिशील कास्टिंग के कुछ 'अच्छे उपयोग' उदाहरण क्या हैं?
- 20. पॉइंटर पैरामीटर क्यों हैं?
- 21. बूस्ट को साझा करने के लिए shared_ptr कास्टिंग *
- 22. Android की ContentResolver.query() को शून्य करने के लिए क्या कारण बनता है?
- 23. क्या एक शून्य प्रकार के लिए आवंटित टर्नरी अभिव्यक्ति का उपयोग करते समय शून्य को शून्य करने का अधिकार है?
- 24. फ़ंक्शन पॉइंटर के आकार के बारे में क्या गारंटी है?
- 25. कास्टिंग
- 26. फ़ंक्शन को कॉल करने के बजाय "syscall" का उपयोग करने के क्या कारण हैं?
- 27. शून्य सूचक अंकगणितीय
- 28. कास्टिंग चार [] [] से चार ** segfault का कारण बनता है?
- 29. ठीक है एक पॉइंटर जारी करने के लिए ठीक है?
- 30. तर्क के रूप में विभिन्न पॉइंटर प्रकारों के साथ फ़ंक्शन पॉइंटर्स कास्टिंग
महान उत्तर, धन्यवाद! – Maulrus