सी ++ सरणी आरंभीकरण


80

यह सभी 0s के लिए एक सरणी intializing का रूप है

char myarray[ARRAY_SIZE] = {0} सभी संकलक द्वारा समर्थित? ,

यदि हां, तो क्या अन्य प्रकारों के समान सिंटैक्स है? उदाहरण के लिए

bool myBoolArray[ARRAY_SIZE] = {false} 

मुझे यकीन है कि अच्छा पैसा falseउसी के रूप में होगा 0(अन्यथा if(false)झूठे का मूल्यांकन नहीं होगा), इसलिए आपके पास संभवतः 99% कंपाइलरों पर काम होगा। अन्य 1% के बारे में सुनिश्चित नहीं किया जा सकता जब तक कि हम मानक का हवाला नहीं देते।
क्रिस लुत्ज

मैं जानता हूँ कि सी में, कि int a[10] = { 1, 2, 3 };सेट हो जाएगा a[3]..a[9]करने के लिए 0, ( "परोक्ष प्रारंभ वस्तुओं है कि स्थिर भंडारण अवधि के रूप में ही")। क्या यह C ++ के लिए सही है?
आलोक सिंघल

5
हाँ यह करता है। यह सी के लिए सच पकड़ नहीं किया, तो ++ तो सी ++ भी दूर से पीछे की ओर सी के साथ संगत नहीं होगा
क्रिस लुट्ज़

2
falseके समान नहीं है 0, लेकिन में {0}0 में बदल जाती है false, और में (सी ++ के लिए) {}तुम भी रूपांतरण के बारे में देखभाल करने के लिए की जरूरत नहीं है: यह करने के लिए प्रारंभ है falseया 0या नल-सूचक या किसी भी अन्य प्रकार के प्रति संवेदनशील डिफ़ॉल्ट।
जोहान्स स्काउब -

जवाबों:


139

हाँ, इनिशियलाइज़ेशन का यह तरीका सभी C ++ कंपाइलर द्वारा समर्थित है। यह C ++ भाषा का एक हिस्सा है। वास्तव में, यह एक मुहावरा है जो C भाषा से C ++ में आया है। सी भाषा = { 0 }में एक मुहावरेदार सार्वभौमिक शून्य-इनिलाइज़र है । यह भी लगभग हैC ++ में स्थिति है।

चूंकि यह initalizer सार्वभौमिक है, इसलिए boolसरणी के लिए आपको वास्तव में एक अलग "सिंटैक्स" की आवश्यकता नहीं है। प्रकार के 0लिए एक initializer के boolरूप में अच्छी तरह से काम करता है , तो

bool myBoolArray[ARRAY_SIZE] = { 0 };

के साथ पूरे सरणी को इनिशियलाइज़ करने की गारंटी है false। साथ ही साथ

char* myPtrArray[ARRAY_SIZE] = { 0 };

प्रकार के अशक्त बिंदु के साथ पूरे सरणी को शुरू करने की गारंटी में char *

यदि आप मानते हैं कि यह पठनीयता में सुधार करता है, तो आप निश्चित रूप से उपयोग कर सकते हैं

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

लेकिन बात यह है कि = { 0 }वैरिएंट आपको बिल्कुल देता है वही परिणाम देता है।

हालाँकि, C ++ में = { 0 }सभी प्रकार के काम नहीं हो सकते हैं, जैसे कि एनम प्रकार, उदाहरण के लिए, जिसे अभिन्न के साथ आरंभ नहीं किया जा सकता है 0। लेकिन C ++ छोटे रूप का समर्थन करता है

T myArray[ARRAY_SIZE] = {};

यानी बस एक खाली जोड़ी {}। यह किसी भी प्रकार के एक ऐरे को डिफ़ॉल्ट-इनिशियलाइज़ करेगा (तत्वों को डिफॉल्ट इनिशियलाइज़ेशन की अनुमति देता है), जिसका अर्थ है कि बेसिक (स्केलर) प्रकारों के लिए पूरा ऐरर ठीक से इनिशियलाइज़ हो जाएगा।


8
और c ++ 0x में आप इस तरह से कुछ भी इनिशियलाइज़ कर पाएंगे
jk।

4
मेरे कंपाइलर पर (क्यूटी रचनाकार 2.4.1 - क्यूटी संस्करण 4.8.0) अगर मैं लिखता हूं bool myBoolArray[ARRAY_SIZE] = { false };कि सरणी सभी झूठे से शुरू होती है, लेकिन अगर मैं लिखता हूं तो bool myBoolArray[ARRAY_SIZE] = { true };केवल पहला तत्व सही पर सेट होता है, जबकि बाकी सब गलत है। कोई व्याख्या?
धोखेबाज़ कोडर

@rookie कोडर: वास्तव में क्या है? आप क्या उम्मीद करते हैं कि क्या होना चाहिए? C ++ में, यदि आप किसी सरणी को आंशिक रूप से प्रारंभ करते हैं bool, तो शेष आपके लिए शून्य-प्रारंभिक है। यह वैसा ही है जैसा होना चाहिए।
चींटी

1
@AndreyT ललित, लेकिन मुझे यह व्यवहार कम से कम प्रति-सहज ज्ञान युक्त है। अगर मैं इनिशियलाइज़ नहीं करता हूँ, जैसे bool myBoolArray[ARRAY_SIZE];, सरणी में यादृच्छिक मान सम्‍मिलित हैं, इसलिए मुझे उम्‍मीद नहीं थी कि कोई आरंभीकरण किसी सरणी को उसमें विभिन्‍न मानों के साथ लौटा सकता है। बस इतना ही।
धोखेबाज़ कोडर

1
@AndreyT: यकीन है, लेकिन मैंने कभी नहीं सोचा होगा कि हिमस्खलन पहले तत्व से अलग रहा होगा ;-) वैसे भी, infos के लिए धन्यवाद!
धोखेबाज़ कोडर

18

ध्यान दें कि C = 11 सार्वभौमिक आरंभिक सिंटैक्स में '=' ​​वैकल्पिक है, और इसे आमतौर पर लिखने के लिए बेहतर शैली माना जाता है:

char myarray[ARRAY_SIZE] {0}

0

हां, मेरा मानना ​​है कि इसे काम करना चाहिए और इसे अन्य डेटा प्रकारों पर भी लागू किया जा सकता है।

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


-1

आप इस प्रकार के तरीकों से C ++ में ऐरे को घोषित कर सकते हैं। यदि आप सरणी का आकार जानते हैं, तो आपको इसके लिए सरणी घोषित करना चाहिए: पूर्णांक: int myArray[array_size]; डबल: double myArray[array_size]; चार और स्ट्रिंग: char myStringArray[array_size]; चार और स्ट्रिंग के बीच का अंतर इस प्रकार है:

char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";

यदि आपको सरणी का आकार नहीं पता है, तो आपको सरणी को निम्न तरह छोड़ देना चाहिए।

पूर्णांक: int myArray[array_size];

डबल: double myArray[array_size];

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.