2012-01-16 10 views
18

क्या वास्तव में इसे शुरू करने से पहले इस तरह एक चर घोषित करने का कोई तरीका है?सी में घोषणा के बाद एक सरणी शुरू करना संभव है?

CGFloat components[8] = { 
     0.0, 0.0, 0.0, 0.0, 
     0.0, 0.0, 0.0, 0.15 
    }; 

मैं चाहूँगा यह कुछ इस तरह (सिवाय यह काम नहीं करता) की घोषणा की:

CGFloat components[8]; 
    components[8] = { 
     0.0, 0.0, 0.0, 0.0, 
     0.0, 0.0, 0.0, 0.15 
    }; 
+2

नहीं, ऐसा नहीं है। –

+1

@PaulTomblin: जैसा कि ओपी ने सुझाव दिया है, लेकिन कुछ अलग तरीकों से सरणी को असाइन करना संभव है। – dreamlax

उत्तर

22

तुम बहुत मूल रूप से arrays के लिए आप क्या प्रस्ताव नहीं कर सकता लेकिन C99 में आप कर सकते हैं असाइन नहीं कर सकते ऐसा करते हैं:

CGFloat *components; 
components = (CGFloat [8]) { 
    0.0, 0.0, 0.0, 0.0, 
    0.0, 0.0, 0.0, 0.15 
}; 

(){ } ऑपरेटर यौगिक शाब्दिक ऑपरेटर कहा जाता है। यह एक सी 99 सुविधा है।

ध्यान दें कि इस उदाहरण में components को एक सूचक के रूप में घोषित किया गया है और एक सरणी के रूप में नहीं।

+0

बहुत बढ़िया, धन्यवाद! यह वही था जो मुझे चाहिए! – RyJ

+0

यह त्रुटि को ठीक से बचाता है लेकिन यह सरणी को पॉप्युलेट नहीं करता है। मैं रंग विचारों को पकड़ने के लिए दो CGFloat arrays के डिफ़ॉल्ट मान सेट करने के लिए क्वार्ट्ज में इस विचार का उपयोग करने की कोशिश कर रहा हूं और यह काम नहीं कर रहा है। मैं पॉइंटर स्थिर CGFloat * रंग शुरू करता हूं, फिर मैं इस दृष्टिकोण को आज़माता हूं और रंग = (CGFloat [4]) {1.0, 0.0, 0.0, 1.0} करता हूं; और उसके बाद CGContextSetFill (संदर्भ, रंग) को कॉल करें जो इसे आकर्षित नहीं करता है। अगर मैं बस स्थिर रंग करता हूं [4]; फिर रंग [0] = 1.0; रंग [3] = 1.0 और भरने की कॉल दोहराएं, यह अपेक्षित के रूप में काम करता है। मैं क्या गलत कर रहा हूं? धन्यवाद। – Miek

4

यदि आप अपनी सरणी को संरचना में लपेटते हैं, तो यह असाइन करने योग्य हो जाता है।

typedef struct 
{ 
    CGFloat c[8]; 
} Components; 


// declare and initialise in one go: 
Components comps = { 
    0.0, 0.0, 0.0, 0.0, 
    0.0, 0.0, 0.0, 0.15 
}; 


// declare and then assign: 
Components comps; 
comps = (Components){ 
    0.0, 0.0, 0.0, 0.0, 
    0.0, 0.0, 0.0, 0.15 
}; 


// To access elements: 
comps.c[3] = 0.04; 

आप यह तरीका अपनाते हैं, तो आप भी Components structs तरीकों से लौट सकते हैं, जिसका अर्थ है आप आरंभ और struct करने के लिए आवंटित करने के लिए, उदाहरण के लिए काम करता है बना सकते हैं:

Components comps = SomeFunction(inputData); 

DoSomethingWithComponents(comps); 

comps = GetSomeOtherComps(moreInput); 

// etc. 
0

कि सरणियों के लिए अंकन और structs केवल प्रारंभिकरण में मान्य है, तो नहीं।