2016-04-22 7 views
9

सी में, मैं ऐसा क्यों नहीं कर सकते हैं:मैं निरंतर सरणी को तर्क के रूप में क्यों नहीं पारित कर सकता हूं?

arrayfn({1.0, 2.0, 3.0}); 

अगर arrayfn कुछ समारोह है कि प्रकार double[] या double* में से एक पैरामीटर में ले जाता है, जो भी है। इसे करने का प्रयास मुझे एक वाक्यविन्यास त्रुटि देता है।

क्या कोई तरीका है कि मैं इस तरह सी में कुछ हासिल कर सकता हूं - संकलन समय पर ज्ञात एक सरणी उत्पन्न करना और तत्काल पास करना - जो कोड की एक पंक्ति को पूर्व-घोषित करने और इसे भरने से बचाता है?

+5

आप एक यौगिक शाब्दिक का उपयोग कर सकते हैं। –

+1

अच्छा जवाब; इसे आजमाया; यह काम करता हैं; हम यहां –

+3

कर चुके हैं हम तब तक नहीं किए जाते जब तक आप कोई जवाब स्वीकार नहीं करते। – Almo

उत्तर

9

संक्षिप्त उत्तर: आपको compound literal का उपयोग करने की आवश्यकता है। कुछ

arrayfn((double[]) {1.0, 2.0, 3.0}); 

नौकरी करना चाहिए।


कुछ स्पष्टीकरण

, भाग, क्यों arrayfn({1.0, 2.0, 3.0}); काम नहीं किया करने के लिए आ रहा है, क्योंकि यौगिक शाब्दिक वाक्य विन्यास के बिना, {1.0, 2.0, 3.0} एक ब्रेस संलग्न प्रारंभकर्ता सूची है। यह एक "ऑब्जेक्ट" को इंगित नहीं करता है जिसे फ़ंक्शन तर्क के रूप में उपयोग किया जा सकता है। वे "निरंतर सरणी", जैसा कि आपने सोचा होगा।

कुछ अधिक जानकारी जोड़ने के लिए, C11, अध्याय §6.5.2.5, यौगिक शाब्दिक

एक पोस्टफ़िक्स अभिव्यक्ति है कि एक ब्रेस संलग्न initializers के सूची है, जिसके बाद एक parenthesized प्रकार नाम के होते हैं के हवाले एक यौगिक शाब्दिक। यह एक अज्ञात ऑब्जेक्ट प्रदान करता है जिसका मूल्य प्रारंभकर्ता सूची द्वारा दिया जाता है।

+0

धन्यवाद! यह काम करता हैं। बिट अजीब बात है कि मेरा तत्काल आवेग '(डबल *) {1.0, 2.0, 3.0}' चलाने के लिए था, जो मैंने नहीं किया था जो मैं करना चाहता था - लेकिन पर्याप्त बंद करो! –

+2

'कॉन्स्ट डबल [] ' – user3528438

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

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