कई अंक:
सी शून्य संकेत परोक्ष किसी अन्य वस्तु सूचक प्रकार में परिवर्तित हो सकते हैं। सी ++ नहीं करता है।
सी में malloc()
के परिणाम कास्टिंग करना उपयोगी डायग्नोस्टिक को दबाएगा यदि आप stdlib.h शामिल करना भूल जाते हैं या अन्यथा malloc()
के दायरे में कोई घोषणा नहीं है। याद रखें कि यदि सी पूर्व घोषणा के बिना फ़ंक्शन कॉल देखता है, तो यह मान लेगा कि फ़ंक्शन int
देता है। यदि आपके पास malloc()
के लिए कोई घोषणा नहीं है और आप कास्ट छोड़ देते हैं, तो आपको असंगत प्रकार (सूचक से int) असाइन करने की कोशिश कर रहे प्रभाव के लिए निदान मिलेगा। यदि आप परिणाम डालते हैं, तो आप डायग्नोस्टिक को दबाते हैं और संभावित रूप से रनटाइम समस्याएं होती हैं, क्योंकि इसकी गारंटी नहीं है कि एक सूचक मूल्य को एक int में वापस और फिर एक पॉइंटर में परिवर्तित करने से आपको एक उपयोगी परिणाम मिल जाएगा।
यदि आप सी ++ लिख रहे हैं, तो आपको malloc()
और free()
के बजाय new
और delete
का उपयोग करना चाहिए।हाँ, हाँ, हाँ, मैंने सभी कारणों को सुना है कि क्यों लोग अपने कोड को सी और सी ++ दोनों के रूप में संकलित करना चाहते हैं, लेकिन भाषा के लिए सही स्मृति प्रबंधन उपकरण का उपयोग करने के लाभ दो संस्करणों को बनाए रखने की लागत से अधिक हैं।
नोट: void *
प्रकार C89 मानक में जोड़ा गया था; सी के पहले संस्करणों में malloc()
वापसी char *
थी, इसलिए उन संस्करणों में आवश्यक था यदि आप परिणाम को एक अलग सूचक प्रकार के लिए निर्दिष्ट कर रहे थे। लगभग हर कोई कम से कम C89 मानक का समर्थन करता है, इसलिए आपके पुराने कार्यान्वयन में से एक में चलने की बाधा बहुत कम है।
स्रोत
2010-08-13 14:44:22
सी ++ अधिक प्रकार के संवेदनशील होने के कारण आपको एक कास्ट के माध्यम से सटीक प्रकार निर्दिष्ट करने की आवश्यकता होती है। – Abhay
यह सीधे आपके प्रश्न से संबंधित नहीं है, लेकिन मुझे लगता है कि आप 'sizeof (int) ',' sizeof (int *)' नहीं चाहते हैं। उस ने कहा, 'sizeof * int_ptr' का उपयोग करना बेहतर है, जो गारंटी देता है कि आप जो भी प्रकार' int_ptr' इंगित करते हैं, उसके लिए आप सही मात्रा में स्मृति आवंटित करेंगे। – bcat
आप सी ++ में मॉलोक का उपयोग क्यों करेंगे? – SoapBox