यह सभी 0s के लिए एक सरणी intializing का रूप है
char myarray[ARRAY_SIZE] = {0} सभी संकलक द्वारा समर्थित? ,
यदि हां, तो क्या अन्य प्रकारों के समान सिंटैक्स है? उदाहरण के लिए
bool myBoolArray[ARRAY_SIZE] = {false}
यह सभी 0s के लिए एक सरणी intializing का रूप है
char myarray[ARRAY_SIZE] = {0} सभी संकलक द्वारा समर्थित? ,
यदि हां, तो क्या अन्य प्रकारों के समान सिंटैक्स है? उदाहरण के लिए
bool myBoolArray[ARRAY_SIZE] = {false}
int a[10] = { 1, 2, 3 };सेट हो जाएगा a[3]..a[9]करने के लिए 0, ( "परोक्ष प्रारंभ वस्तुओं है कि स्थिर भंडारण अवधि के रूप में ही")। क्या यह C ++ के लिए सही है?
falseके समान नहीं है 0, लेकिन में {0}0 में बदल जाती है false, और में (सी ++ के लिए) {}तुम भी रूपांतरण के बारे में देखभाल करने के लिए की जरूरत नहीं है: यह करने के लिए प्रारंभ है falseया 0या नल-सूचक या किसी भी अन्य प्रकार के प्रति संवेदनशील डिफ़ॉल्ट।
जवाबों:
हाँ, इनिशियलाइज़ेशन का यह तरीका सभी 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] = {};
यानी बस एक खाली जोड़ी {}। यह किसी भी प्रकार के एक ऐरे को डिफ़ॉल्ट-इनिशियलाइज़ करेगा (तत्वों को डिफॉल्ट इनिशियलाइज़ेशन की अनुमति देता है), जिसका अर्थ है कि बेसिक (स्केलर) प्रकारों के लिए पूरा ऐरर ठीक से इनिशियलाइज़ हो जाएगा।
bool myBoolArray[ARRAY_SIZE] = { false };कि सरणी सभी झूठे से शुरू होती है, लेकिन अगर मैं लिखता हूं तो bool myBoolArray[ARRAY_SIZE] = { true };केवल पहला तत्व सही पर सेट होता है, जबकि बाकी सब गलत है। कोई व्याख्या?
bool, तो शेष आपके लिए शून्य-प्रारंभिक है। यह वैसा ही है जैसा होना चाहिए।
bool myBoolArray[ARRAY_SIZE];, सरणी में यादृच्छिक मान सम्मिलित हैं, इसलिए मुझे उम्मीद नहीं थी कि कोई आरंभीकरण किसी सरणी को उसमें विभिन्न मानों के साथ लौटा सकता है। बस इतना ही।
हां, मेरा मानना है कि इसे काम करना चाहिए और इसे अन्य डेटा प्रकारों पर भी लागू किया जा सकता है।
वर्ग सरणियों के लिए, हालांकि, सरणी में तत्वों की तुलना में प्रारंभिक सूची में कम आइटम हैं, तो शेष तत्वों के लिए डिफ़ॉल्ट निर्माणकर्ता का उपयोग किया जाता है। यदि कोई डिफ़ॉल्ट कंस्ट्रक्टर वर्ग के लिए परिभाषित नहीं किया गया है, तो शुरुआती सूची पूरी होनी चाहिए - अर्थात, सरणी में प्रत्येक तत्व के लिए एक इनिलाइज़र होना चाहिए।
आप इस प्रकार के तरीकों से 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];
falseउसी के रूप में होगा0(अन्यथाif(false)झूठे का मूल्यांकन नहीं होगा), इसलिए आपके पास संभवतः 99% कंपाइलरों पर काम होगा। अन्य 1% के बारे में सुनिश्चित नहीं किया जा सकता जब तक कि हम मानक का हवाला नहीं देते।