2011-02-14 9 views

उत्तर

12

मुझे लगता है आप कुछ इस तरह का मतलब:

int *iptr = (int*)malloc(/* something */);

और सी में, आप की जरूरत नहीं है (और नहीं होना चाहिए) malloc से वापसी सूचक डाली । यह void * है और सी में, यह निश्चित रूप से किसी अन्य सूचक प्रकार में परिवर्तित हो गया है।

int *iptr = malloc(/* something */);

वरीयता स्वरूप है।

यह सी ++ पर लागू नहीं होता है, जो समान void * निहित कलाकार व्यवहार साझा नहीं करता है।

+0

क्या आप स्पष्ट रूप से समझा सकते हैं? – user615929

+0

@ user615929 - आपको और स्पष्ट रूप से क्या समझाया जाना चाहिए? आपको 'malloc' से वापसी 'शून्य *' को डालने की आवश्यकता नहीं है क्योंकि यह स्वतंत्र रूप से और अन्य सूचक प्रकारों में परिवर्तित हो सकती है। – birryree

+0

char * iptr = (char *) malloc (/ * कुछ); मतलब है, यह चार में कास्ट टाइप करेगा; char * iptr = malloc (/ * कुछ); आकार आवंटित करने के बाद ... यह चार में कास्ट कैसे टाइप करेगा? – user615929

1

सिर्फ इसलिए कि मॉलोक void * देता है और void* ने आकार निर्धारित नहीं किया है, आप उस पर पॉइंटर अंकगणित लागू नहीं कर सकते हैं। तो आप आमतौर पर पॉइंटर को डेटा आवंटित करते हैं जो आपके आवंटित मेमोरी ब्लॉक वास्तव में इंगित करता है।

5

आप malloc() के रिटर्न मान डाली कभी नहीं करना चाहिए, सी ऐसा करने से में है:

  • अनावश्यक है, क्योंकि void * किसी अन्य सूचक प्रकार (समारोह संकेत को छोड़कर के साथ संगत है, लेकिन वह यहां लागू नहीं होता)।
  • संभावित रूप से खतरनाक, क्योंकि यह एक त्रुटि छुपा सकता है (फ़ंक्शन की अनुपलब्ध घोषणा)।
  • अव्यवस्था, कास्ट लंबे और अक्सर पढ़ने के लिए कठिन होते हैं, इसलिए यह कोड को उलझन में डाल देता है।

तो: कम से कम तीन कमियां नहीं हैं, और इस प्रकार इसे टालना चाहिए।

+0

मुझे दूसरा बिंदु नहीं मिला। क्या आप आगे बता सकते हैं? – Mahesh

+0

दूसरा बिंदु गलत है। यदि आप को शामिल करना भूल जाते हैं, इससे कोई फर्क नहीं पड़ता कि आपने मॉलोक का नतीजा डाला है या नहीं, आपको "निहित कार्य घोषणा" चेतावनी मिलती है (अधिकांश कंपाइलरों के लिए अतिरिक्त स्विच किए बिना)। यदि आप चेतावनियां उत्पन्न करते हैं और अनदेखा करते हैं - यह आपकी समस्या है, न कि संकुचित, संकलक नहीं, कास्टिंग नहीं - यह आप हैं। पहला बिंदु एक शुष्क तथ्य है, इसके बारे में कोई बहस नहीं है। अन्य सभी बिंदु केवल आपकी व्यक्तिगत वरीयता के बारे में हैं। – sirgeorge

0

उत्तर सही हैं, मैं सिर्फ एक सलाह है:

  • संकेत के साथ खेलने नहीं है - जो malloc() रिटर्न - बहुत ज्यादा है, उन्हें एक निर्दिष्ट प्रकार asap के लिए डाली;
  • अगर आप उनके साथ कुछ गणित करने की जरूरत है, करने के लिए चार * उन्हें डाली तो ptr ++ अर्थ होगा कि आप को छोड़कर क्या: यह करने के लिए जोड़ 1 (डेटाप्रकार का आकार जो चार के लिए 1 है जोड़ दिया जाएगा,)।