2010-06-09 15 views
5

मैं एक ज्ञात आकार की एक सरणी में पारित कर सकते हैं, तो:सी ++ में ज्ञात आकार की एक सरणी लौटाएं?

void fn(int(*intArray)[4]) 
{ 
    (*intArray)[0] = 7; 
} 

क्यों नहीं मैं एक लौट सकते हैं:

int intArray[4] = {0}; 
int(*)[4] fn() 
{ 
    return &intArray; 
} 
यहाँ

, ")" में "(*)" उत्पन्न " वक्य रचना त्रुटि :)"।

+0

आप ज्ञात आकार की एक सरणी के लिए एक सूचक में गुजर रहे हैं। सी ++ में, एक संदर्भ बेहतर हो सकता है क्योंकि यह इसे कम करने के बजाए सरणी की तरह व्यवहार करेगा। –

उत्तर

4

[4] समारोह नाम के बाद चला जाता है, जैसे यह एक चर परिभाषा चर नाम के बाद चला जाता है: होने के लिए

int (*fn())[4] 
{ 
    return &intArray; 
} 

के बाद से यह बहुत ही अस्पष्ट वाक्य रचना है, होने का खतरा जो इसे पढ़ता है, उसे भ्रमित करने के लिए, मैं सरणी को एक साधारण int* के रूप में वापस करने की अनुशंसा करता हूं, यदि आपके पास कोई विशेष कारण नहीं है कि इसे पॉइंटर-टू-एरे क्यों होना चाहिए।

तुम भी एक typedef साथ समारोह परिभाषा को आसान बनाने में कर सकते हैं:

typedef int intarray_t[4]; 

intarray_t* fn() { ... } 
+0

हम्म, यह किसी भी ऑनलाइन कंपाइलर – Will

+0

@Will पर काम नहीं करता है: यह जीसीसी v3.4.3 और v4.4.1 के साथ-साथ सूर्य सीसी v5.9 के साथ भी काम करता है, इसलिए मैं कहूंगा कि यह उन लोगों के साथ एक समस्या है ऑनलाइन कंपाइलर्स। – sth

+0

आप सिंटैक्स समस्याओं को कम करने के लिए टाइपपीफ का उपयोग कर सकते हैं। लेकिन वास्तव में, आप int **, या यहां तक ​​कि int * लौटने से बेहतर हैं। – Arkadiy

1

आप लौट सकते हैं int**

+0

या शून्य *। दोनों के पास सरणी के आकार के बारे में अधिक जानकारी है। –

2

Its not allowed to return arrays from functions, but there are workarounds

उदाहरण के लिए, निम्न कोड:

int fn()[4] { 
    ... 

विभिन्न ऑनलाइन compilers द्वारा स्वीकार नहीं मिलता है; मैं Comeau ऑनलाइन संकलक, जो compilers के सबसे मानक निम्न में से एक माना जाता है पर यह कोशिश की, और यहां तक ​​कि आराम मोड में यह कहते हैं:

error: function returning array is not allowed

एक और पोस्टर int** लौटने का सुझाव ; यह काम करेगा, लेकिन बहुत सावधान रहें कि आप ढेर-आवंटित स्मृति लौटाएं और स्टैक-आवंटित न करें।

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