मॉलोक में टाइपकास्ट का उपयोग क्या है? अगर मैं मॉलोक में टाइपकास्ट नहीं लिखता तो यह वापस क्या होगा? (क्यों malloc में आवश्यक Typecasting है)मॉलोक में टाइपकास्ट आवश्यक है?
उत्तर
मुझे लगता है आप कुछ इस तरह का मतलब:
int *iptr = (int*)malloc(/* something */);
और सी में, आप की जरूरत नहीं है (और नहीं होना चाहिए) malloc
से वापसी सूचक डाली । यह void *
है और सी में, यह निश्चित रूप से किसी अन्य सूचक प्रकार में परिवर्तित हो गया है।
int *iptr = malloc(/* something */);
वरीयता स्वरूप है।
यह सी ++ पर लागू नहीं होता है, जो समान void *
निहित कलाकार व्यवहार साझा नहीं करता है।
सिर्फ इसलिए कि मॉलोक void
* देता है और void*
ने आकार निर्धारित नहीं किया है, आप उस पर पॉइंटर अंकगणित लागू नहीं कर सकते हैं। तो आप आमतौर पर पॉइंटर को डेटा आवंटित करते हैं जो आपके आवंटित मेमोरी ब्लॉक वास्तव में इंगित करता है।
आप malloc()
के रिटर्न मान डाली कभी नहीं करना चाहिए, सी ऐसा करने से में है:
- अनावश्यक है, क्योंकि
void *
किसी अन्य सूचक प्रकार (समारोह संकेत को छोड़कर के साथ संगत है, लेकिन वह यहां लागू नहीं होता)। - संभावित रूप से खतरनाक, क्योंकि यह एक त्रुटि छुपा सकता है (फ़ंक्शन की अनुपलब्ध घोषणा)।
- अव्यवस्था, कास्ट लंबे और अक्सर पढ़ने के लिए कठिन होते हैं, इसलिए यह कोड को उलझन में डाल देता है।
तो: कम से कम तीन कमियां नहीं हैं, और इस प्रकार इसे टालना चाहिए।
मुझे दूसरा बिंदु नहीं मिला। क्या आप आगे बता सकते हैं? – Mahesh
दूसरा बिंदु गलत है। यदि आप
उत्तर सही हैं, मैं सिर्फ एक सलाह है:
- संकेत के साथ खेलने नहीं है - जो malloc() रिटर्न - बहुत ज्यादा है, उन्हें एक निर्दिष्ट प्रकार asap के लिए डाली;
- अगर आप उनके साथ कुछ गणित करने की जरूरत है, करने के लिए चार * उन्हें डाली तो ptr ++ अर्थ होगा कि आप को छोड़कर क्या: यह करने के लिए जोड़ 1 (डेटाप्रकार का आकार जो चार के लिए 1 है जोड़ दिया जाएगा,)।
आपmalloc
के रिटर्न मान कास्ट करने के लिए नहीं आवश्यक होता है। सी एफएक्यू में आगे चर्चा की गई है: http://c-faq.com/malloc/cast.html और http://c-faq.com/malloc/mallocnocast.html।
क्या आप स्पष्ट रूप से समझा सकते हैं? – user615929
@ user615929 - आपको और स्पष्ट रूप से क्या समझाया जाना चाहिए? आपको 'malloc' से वापसी 'शून्य *' को डालने की आवश्यकता नहीं है क्योंकि यह स्वतंत्र रूप से और अन्य सूचक प्रकारों में परिवर्तित हो सकती है। – birryree
char * iptr = (char *) malloc (/ * कुछ); मतलब है, यह चार में कास्ट टाइप करेगा; char * iptr = malloc (/ * कुछ); आकार आवंटित करने के बाद ... यह चार में कास्ट कैसे टाइप करेगा? – user615929