2012-02-17 11 views
5
int (*p)[2]; 
p=(int(*))malloc(sizeof(int[2])*100); 

किसी सूचक को किसी सरणी को मॉलोक करने का सही तरीका क्या है? मैं (int (*)) के साथ भाग को समझ नहीं सकतामैलोक पॉइंटर को सरणी

+2

सी में '(int (*))' बचा जाना चाहिए। यह सुझाव दिया जाता है कि आप 'malloc' के वापसी मूल्य नहीं डालते हैं। –

+0

अरे वाह कोई और अधिक त्रुटियों संकलन, आप – titus

+1

धन्यवाद और अगर आप वास्तव में वास्तव में कास्ट करना चाहते हैं, यह होना चाहिए '(int (*) [2])'। '(int (*))' 'int *' है। आकार 'malloc' के लिए पारित ठीक लग रहा है (2 ints की सरणी के लिए 100 संकेत के लिए आकार का आवंटन) –

उत्तर

8

उत्तर के रूप में टिप्पणी पोस्ट करना:
C में आपको malloc का वापसी मूल्य नहीं डालना चाहिए। के बारे में क्यों malloc की typecasting वापसी मान C में एक अच्छा विचार नहीं है अधिक जानकारी के लिए इतने पर this post देखें। और अगर किसी कारण से आप वास्तव में वास्तव में डालना चाहते हैं, तो यह (int(*)[2]) होना चाहिए। (int(*))int * है। मॉलोक को पास किया गया आकार ठीक दिखता है (100 पॉइंटर्स के लिए आवंटित आकार 2 इन्स की सरणी)। तो आपको

int (*p)[2]; 
p=malloc(sizeof(int[2])*100); 

आशा है कि इससे मदद मिलती है!

-1

यह स्पष्ट नहीं है कि आप यहां क्या चाहते हैं। यदि आप 100 int जोड़े चाहते हैं, उदाहरण के लिए, int को पॉइंटर्स की सरणी के रूप में व्यवस्थित किया गया है (जहां प्रत्येक पॉइंटर बिल्कुल दो इन्सट्स पर इंगित करता है), तो आपको 100 पॉइंटर्स पर 100 बार मॉलोक को कॉल करने की आवश्यकता होती है, प्रत्येक बार दो पूर्णांक आवंटित करते हैं।

यह सिर्फ 'करने के लिए "malloc एक सरणी के लिए सूचक" मतलब नहीं है। आप एक सरणी को malloc कर सकते हैं, और उस पते को एक सूचक को असाइन कर सकते हैं, या आप पॉइंटर्स की एक सरणी malloc कर सकते हैं। लेकिन आपने जो पूछा है वह स्पष्ट नहीं है।

+1

ठीक है, लेकिन अगर मुझे नहीं पता कि मुझे रनटाइम पर 100 पॉइंटर्स चाहिए? अगर मुझे 10000 की ज़रूरत है तो क्या होगा? मुझे लगता है कि मैं इसे सही कर रहा हूं – titus

+2

मुझे लगता है कि यह स्पष्ट है कि ओपी को यहां क्या चाहिए। –

संबंधित मुद्दे