2012-04-19 11 views
7

मैं malloc() का उपयोग कर int* डेटा प्रकार के साथ एक गतिशील सरणी बना रहा हूं। लेकिन समस्या यह है कि सरणी के अंत को कैसे जानना है? int* डेटा प्रकार के लिए \0 के बराबर कोई नहीं है, तो, यह कैसे करें? फ़ंक्शन के आउट पैरामीटर के रूप में पास आकार? मुझे उम्मीद है कि यह आपके लिए स्पष्ट है। कोई भी मदद बहुत सराहनीय है।int * सरणी के अंत को कैसे जानें?

+0

आप malloc() glob कुछ m memory (sizeof (int) * ELEMENTS) की तरह कुछ स्मृति का उपयोग कर रहे हैं। मुझे लगता है। फिर आप वास्तव में जानते हैं कि आकार में ELEMENTS, आप चर को सहेज सकते हैं और इसे अपने कार्यों में भेज सकते हैं। –

उत्तर

11

सी कुछ अन्य भाषाओं के रूप में सरणी लंबाई का प्रबंधन नहीं करता है।

typedef struct t_thing { 
    int* things; 
    size_t count; 
} t_thing; 

उपयोग में: जहाँ आपके गतिशील सरणी का अंत है

t_thing t = { (int*)malloc(sizeof(int) * n), n }; 
8

पूर्णांक के लिए \0 के बराबर कोई "आधिकारिक" नहीं है, लेकिन आप निश्चित रूप से अपने मूल्य का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आपके पूर्णांक दूरी का प्रतिनिधित्व करते हैं तो आप सरणी के अंत को इंगित करने के लिए सेंटीनेल मान के रूप में -1 (वैध दूरी नहीं) का उपयोग कर सकते हैं।

अपने पूर्णांक सरणी यथोचित किसी भीint मूल्य शामिल कर सकते हैं, तो आप वापस आवंटित सरणी के आकार अपने कार्य करने के लिए एक अतिरिक्त पैरामीटर के साथ पारित कर सकते हैं।

+0

मुझे आपको पसंद है। मैं '# EFEINE EON EOF' का भी उपयोग करूंगा। – Jack

0

आप NULL का उपयोग अंतिम मूल्य के रूप में कर सकते हैं। आप सरणी के साथ एक स्ट्रक्चर में एक पूर्णांक जोड़ सकते हैं जो प्रविष्टियों की संख्या को ट्रैक करता है। या आप आकार को अलग से ट्रैक कर सकते हैं। हालांकि आप इसे कर सकते हैं।

+3

आप int [] के लिए अंतिम मान के रूप में संभवतः NULL का उपयोग कैसे करेंगे? बाइट 00 00 00 00 का अर्थ केवल (int) 0 के रूप में किया जाएगा। –

+0

बिल्कुल। यदि सरणी में कोई अन्य मान 0 नहीं है, तो आप टर्मिनेटर के रूप में 0 का उपयोग कर सकते हैं। –

+2

और यदि कोई अन्य मान 42 नहीं है, तो आप 42 का उपयोग कर सकते हैं। उत्तर कम से कम मेरे लिए तात्पर्य है कि 'int' किसी भी तरह एक शून्य प्रकार है, जो निश्चित रूप से नहीं है। –

0

सी पता नहीं है

आप इस के लिए एक संरचना पर विचार करें। आपको सरणी के लिए आवंटित आकार को याद रखना चाहिए।

0

जब आप मॉलोक के साथ स्मृति आवंटित करते हैं, आवंटित बाइट्स की संख्या 'malloc'ated स्मृति की शुरुआत से पहले ही संग्रहीत की जाती है। यदि आप आकार जानते हैं, तो आप अंत को भी जानते हैं! यह सी, के & आर पुस्तक के बाइबल में समझाया गया है। इच्छा है कि मैं आपको पेज नंबर भी दे सकता हूं, लेकिन जब आप इसे देखते हैं तो आपको पता चलेगा।

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