2010-05-23 17 views
5

चलें कहते हैं कि मैंलूप के बिना सी में किसी सरणी को सरणी कैसे प्रारंभ करें?

int arr[10][10]; 

अब मैं 0 पर इस सरणी के सभी तत्वों को प्रारंभ करना चाहते हैं की तरह एक सरणी है मैं छोरों या प्रत्येक तत्व निर्दिष्ट किए बिना यह कैसे कर सकते?

कृपया ध्यान दें कि इस सवाल करता है, तो सी

+0

डुप्लिकेट: http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – ptomato

उत्तर

11

त्वरित-एन-गंदा समाधान:

int arr[10][10] = { 0 }; 

आप आरंभ तो सरणी में से किसी तत्व, सी किसी भी तत्व है कि आप स्पष्ट रूप से निर्दिष्ट नहीं है डिफ़ॉल्ट-आरंभ होगा। तो उपरोक्त कोड शून्य पर पहला तत्व प्रारंभ करता है, और सी अन्य सभी तत्वों को शून्य पर सेट करता है।

+1

यह सभी तत्वों को 0 पर प्रारंभ करेगा? तुम उसका गंदे क्यों कहते हो? – Laz

+9

बस स्पष्ट करने के लिए: यह "सूट का पालन नहीं करता है," यह * उन्हें * शून्य * बल देता है। यदि आपने '= {1} लिखा है, तो यह पहला मान 1 के रूप में रखेगा, और शेष अभी भी शून्य होंगे। –

+1

मैं त्वरित-एन-गंदा कहता हूं, भले ही यह तर्कसंगत रूप से सही और काम करने की गारंटी है, यह रखरखाव को भ्रमित कर सकता है। मैं इसे शॉर्टकट मानता हूं, और इसे तब तक उपयोग करने से बचता हूं जब तक कि प्रत्येक तत्व को आसानी से शुरू करने के लिए सरणी या डेटा संरचना बहुत बड़ी न हो। –

1
int myArray[2][2] = {}; 

तुम भी स्पष्ट रूप से शून्य लिखने की जरूरत नहीं है के लिए।

+0

यह गलत सरणी प्रकार है, और एक अजीब दिखने वाला "शून्य" है। –

+0

हाँ, इसके बारे में खेद है। अपडेट किया गया। –

+0

मुझे लगता है कि सी में आपको शून्य लिखना है (खाली ब्रेसिज़, हालांकि, वैध सी ++ हैं)। – avakar

5

प्रारंभ वाक्य रचना के अलावा, आप कर सकते हैं हमेशा memset(arr, 0, sizeof(int)*10*10)

+0

ध्यान दें कि यह अभी भी एन तत्वों के लिए ओ (एन) समय लेता है। दूसरी तरफ यह आपके हाथ से कोड (या कम से कम धीमा नहीं) की तुलना में शायद तेज़ ओ (एन) है। – dmckee

+0

मेमसेट एक लूप का उपयोग करता है, इसलिए यह सवाल का जवाब नहीं देता है। – SoapBox

+0

'मेमसेट' सूचक या फ़्लोटिंग-पॉइंट सरणी के लिए भी गलत हो सकता है। –

3

आप भाग्यशाली हैं: 0 के साथ, यह संभव है।

memset(arr, 0, 10 * 10 * sizeof(int)); 

आप 0 तुलना में एक और मूल्य के साथ ऐसा नहीं कर सकते, क्योंकि बाइट्स पर memset काम करता है, int रों पर नहीं। लेकिन int है कि सभी 0 बाइट्स हमेशा 0 मान होंगे।

+1

आप इसे 0 – geocar

+1

के साथ भी कर सकते हैं ... सभी तत्वों को -1 में प्रारंभ करना। अच्छा मुद्दा, उस बारे में सोचा नहीं था। – Thomas

+0

आप इसे किसी भी अन्य मूल्य के साथ कर सकते हैं, क्योंकि बाइट्स में प्रत्येक बाइट में समान मान होता है। 'n * (UINT_MAX + 1ULL)/255' ऐसे मानों का परिवार है (' n' = 0,1, ..., 'UCHAR_MAX')। –

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