2016-03-10 8 views
6
#include <iostream> 
using namespace std; 

int main() { 
    int arr[10] = {}; 
    for(auto element : arr) 
    { 
     cout<<element<<" "; 
    } 
    cout<<endl; 
} 

अगर मैं लिखना int arr[10] = {}, arr में तत्वों सभी 0 हैं। लेकिन अगर मैं सिर्फ int arr[10] wrtie, arr में तत्व यादृच्छिक हैं। तो मैं int arr[10] = {} के बारे में उलझन में हूं, मैं सिर्फ एक सरणी int arr[10] घोषित करता हूं, लेकिन मुझे यह कोई मूल्य नहीं देता है, केवल {}सरणी में प्रारंभ सी ++

+0

यह, बस एक वाक्यात्मक चीनी है आप शून्य से प्रारंभ पूर्णांकों की सरणी बनाने की जरूरत कई स्थितियों में, कि सरणी आकार की कल्पना है एक तरफ सिटैक्स केवल सरणी के माध्यम से लूप करना है और मैन्युअल रूप से प्रत्येक तत्व को '0' असाइन करना है। सरणी के बारे में और पढ़ें [यहां] (http://www.cplusplus.com/doc/tutorial/arrays/) – tchelidze

+0

अब आपके पास जवाब है, किक्स के लिए, '=' को हटाएं (लेकिन '{}' रखें) और फिर कोशिश करें। 'int arr [10] {};' – WhozCraig

+0

@WhozCraig परिणाम 0 0 0 0 0 0 0 '' '' '' '' 'शायद बेकार है, क्या कारण है? – BlackMamba

उत्तर

5

अगर मैं लिखना पूर्णांक आगमन [10] = {}, आगमन में तत्व हैं सब 0.

है कि कितना भाषा कृत्यों की वाक्य रचना। आपके मामले में सरणी शून्य शुरू हो जाएगी।

लेकिन अगर मैं सिर्फ int arr [10] wrtie, arr में तत्व यादृच्छिक हैं।

आपके मामले में सरणी तत्व प्रारंभ नहीं किए गए हैं। आपको वेरिएबल्स के मान नहीं पढ़ना चाहिए जिन्हें प्रारंभ नहीं किया गया है; अन्यथा आप अपरिभाषित व्यवहार को ट्रिगर करेंगे।

+3

वास्तव में 'int arr [10] = {}; 'वैल्यू * प्रारंभ-आरंभ * होगा। 'int arr [10];' डिफ़ॉल्ट * प्रारंभिक * है जिसका मतलब int के लिए कुछ भी नहीं करना है। (देखें [dcl.init/7]) –

+0

क्या यह केवल मूल प्रकार (int, float, dobule) के लिए काम करता है? अगर मैं एक कस्टम क्लास 'व्यक्ति' को परिभाषित करता हूं, तो क्या व्यक्ति एआर [10] = {} 'काम करता है? – BlackMamba

+0

@BlackMamba उस स्थिति में आपके ऑब्जेक्ट का उदाहरण डिफ़ॉल्ट रूप से प्रारंभ किया जाएगा - जो भी डिफ़ॉल्ट प्रारंभिकरण आपके वर्ग, AFAIK के लिए है। –

2
सीपीपी संदर्भ वेबसाइट ( http://en.cppreference.com/w/c/language/array_initialization) इस शून्य करने के लिए सभी सरणी तत्वों को प्रारंभ करने के लिए कैसे है के अनुसार

:

पूर्णांक एक [3] = {}; शून्य बाहर एक ब्लॉक गुंजाइश सरणी

0

int arr[10]; कुछ भी आरंभ नहीं किया गया है करने के लिए वैध सी ++ रास्ता // अमान्य सी लेकिन, यह स्मृति ब्लॉक एक int के आकार का आवंटन है और आप हो रही है जो भी है कि स्मृति में है। `1000` बजाय,

int arr[10] = {}; सभी int ब्लॉक आरंभ कर रहा है शून्य पर/0

+0

प्रारंभ करने के लिए कन्स्ट्रक्टर को कॉल करना है, यह अंतर्निहित प्रकारों के लिए सच है, लेकिन डिफॉल्ट के बीच अंतर और कन्स्ट्रक्टर के साथ प्रकार के लिए प्रारंभिक मान अधिक जटिल। –

+1

@ मार्टिनबोनर लेकिन वह उदाहरण में एक int सरणी का उपयोग कर रहा है और पूछ रहा है कि उसे सभी 0 या यादृच्छिक डेटा क्यों मिल रहा है। क्या मैं कुछ भूल रहा हूँ?मैं जो कह रहा हूं उसे प्राप्त करता हूं लेकिन ऐसा नहीं लगता कि यह प्रश्न पर लागू होता है। ऑब्जेक्ट ऑब्जेक्ट [10] = {} 'ऑब्जेक्ट्स के डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग करेगा? – lciamp

+1

यदि कोई डिफ़ॉल्ट कन्स्ट्रक्टर है, 'ऑब्जेक्ट एआर [10] = {};' और 'ऑब्जेक्ट एआर [10];' दोनों इसे कॉल करेंगे। यदि यह एक पीओडी प्रकार है तो प्रत्येक ऑब्जेक्ट को पहले मामले में शून्य शुरू किया जाएगा और दूसरे मामले में अनिश्चित छोड़ दिया जाएगा। –

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