2010-08-30 18 views
8

काम नहीं कर रहा मैं बहुत तरह bools की एक सरणी प्रारंभ करने में कोशिश कर रहा हूँ:सी ++ सरणी प्रारंभ

bool FcpNumberIsOk[MAX_FCPS]={true}; 

लेकिन जब मैं यह डिबग, मैं केवल सरणी प्रारंभ के पहले तत्व देखते हैं, दूसरों को झूठे हैं। यह कैसे हो सकता है? मैं उबंटू 10 पर क्यूटी का उपयोग कर रहा हूं और प्रारंभिककरण एक विधि के अंदर एक स्थानीय सरणी पर किया जाता है।

ठीक है आपके उत्तरों के लिए धन्यवाद।

उत्तर

9

क्योंकि सरणी प्रारंभिक तरीका सी ++ में काम करता है। आप स्पष्ट रूप से प्रत्येक तत्व के लिए एक मूल्य, शून्य करने के लिए उस तत्व चूक (या, यहाँ, झूठी)

bool FcpNumberIsOk[MAX_FCPS]={true, true, true, true /* etc */ }; 

ध्यान दें कि

bool FcpNumberIsOk[MAX_FCPS]; 

झूठी या करने के लिए सभी मूल्यों को निर्धारित करेंगे देना नहीं है, तो उन्हें परिभाषित किया गया है, इस पर निर्भर करता है कि उन्हें यादृच्छिक रूप से सेट किया गया है।

+0

यह कब था कि दूसरा संस्करण शुरू किया गया है? मैंने सोचा कि अगर आप स्पष्ट रूप से डिफ़ॉल्ट-युक्त वर्ग/संरचना को प्रारंभ करते हैं? –

+2

@jdv, यदि आप वैरिएबल को स्थिर स्टोरेज अवधि (स्थानीय/क्लास स्टेटिक्स, नेमस्पेस स्कोप वेरिएबल्स) के रूप में परिभाषित करते हैं, तो यह किसी और चीज से पहले प्रोग्राम शुरू होने पर शून्य प्रारंभ होता है। देखें [मुख्य वापसी क्या करती है?] (Http://stackoverflow.com/questions/3309042/what-does-main-return)। –

-1

क्योंकि आपने सरणी के केवल पहले तत्व को स्पष्ट रूप से प्रारंभ किया है, केवल पहला तत्व प्रारंभ किया गया है और शेष नहीं हैं।

+1

शेष * * 0. का एक डिफ़ॉल्ट के लिए शुरू कर रहे हैं यही कारण है कि यह 'उपयोग करने के लिए int सुरक्षित है मैं [10] = {0}; 0 से 0-एक सरणी शुरू करें। – meagar

+0

दरअसल सभी तत्व प्रारंभ होते हैं। मानक बताता है कि सभी शेष तत्व 0 –

+0

@meagar पर सेट हो जाते हैं आप कैसे कह सकते हैं कि "int i [10] = {0}" पहले तत्व पर सेट 0 से कुछ और करता है। –

2

यह व्यवहार की उम्मीद है। पहला तत्व निर्धारित मूल्य और शेष को आरंभ नहीं हो जाता 0 का डिफ़ॉल्ट मान के लिए शुरू कर रहे हैं:

int c[5] = {1}; 

// 1 0 0 0 0 
for(int i = 0; i < 5; ++i) 
    std::cout << c[i] << ' '; 
-1

इस वाक्य रचना आप केवल पहला तत्व आरंभ कर रहे हैं (अपने के मूल्य और अन्य प्राप्त डिफ़ॉल्ट-एक [झूठी साथ उपयोग करना ]), लेकिन दूसरों को नहीं। आपको सभी तत्वों को प्रारंभ करने के लिए या तो int सरणी और मेमसेट या लूप के लिए उपयोग करना चाहिए।

+0

दरअसल सभी तत्व प्रारंभ होते हैं। मानक बताता है कि सभी शेष तत्व 0. –

+0

पर सेट हो गए हैं, ठीक है मेरा मतलब था। ठीक है, मेरी गलती। – f0b0s

+1

'memset' काम करेगा, ज्यादातर समय, लेकिन पोर्टेबल नहीं है। ':: std :: fill' बहुत बेहतर है और 'बूल' सरणी पर काम करेगा, और एक अच्छे कंपाइलर पर यह उतना ही कुशल होगा। – Omnifarious

10

आपने गलत समझा है। ऐसा लगता है कि यद्यपि आप किसी भी unmentioned तत्वों को अंतिम स्पष्ट रूप से प्रारंभिक मूल्य के समान मूल्य के लिए शुरू किया जाएगा। आपके द्वारा वर्णित अंतिम मूल्य true था, इसलिए सभी आगे के तत्वों को true पर भी शुरू किया जाएगा। मैं एक बार एक ही विश्वास था, लेकिन मैं जल्दी से अन्यथा सीखा।

ऐसा नहीं है कि यह कैसे काम करता है। किसी भी unmentioned तत्व डिफ़ॉल्ट-प्रारंभिक मिलता है, जो bool के लिए false है।

true के सभी तत्वों को सेट करने के std::fill_n की तरह कुछ प्रयास करें:

std::fill_n(FcpNumberIsOk, MAX_FCPS, true); 
संबंधित मुद्दे