Arrays कंप्यूटर प्रोग्राम में संरचित डेटा संग्रहण के सबसे अधिक उपयोग किए जाने वाले रूपों में से एक है। उनका प्रसंस्करण वर्ग विधियों और कार्यों में लागू विभिन्न एल्गोरिदम द्वारा किया जा सकता है। तदनुसार, किसी फ़ंक्शन के लिए एक सरणी पास करना अक्सर आवश्यक होता है। सी और सी ++ भाषाएं इस क्रिया को करने के तरीकों को चुनने में बड़ी स्वतंत्रता प्रदान करती हैं।
यह आवश्यक है
सी और सी ++ भाषाओं के कंपाइलर।
अनुदेश
चरण 1
फ़ंक्शन के लिए एक निश्चित आकार की सरणी पास करें। उपयुक्त प्रकार का तर्क रखने के लिए फ़ंक्शन के प्रोटोटाइप को बदलें। उदाहरण के लिए, एक पैरामीटर के रूप में तीन तत्वों के पूर्णांक संख्यात्मक मानों की एक सरणी लेने वाले फ़ंक्शन की घोषणा इस तरह दिख सकती है:
शून्य ArrayFunction (int aNumbers [3]);
इस तरह के फ़ंक्शन को एक तर्क के रूप में सीधे एक सरणी पास करके कहा जाता है:
शून्य कुछ फ़ंक्शन ()
{
int aNumbers = {1, 2, 3};
ऐरेफंक्शन (एक नंबर);
}
स्थानांतरित डेटा को स्टैक पर कॉपी किया जाता है। बुलाए गए फ़ंक्शन में सरणी को संशोधित करने से स्रोत नहीं बदलता है।
चरण दो
फ़ंक्शन में परिवर्तनीय लंबाई सरणी पास करें। ऐसा करने के लिए, संबंधित तर्क के आयाम को निर्दिष्ट न करें:
शून्य ArrayFunction (int aNumbers );
बहुआयामी सरणियों को भी इसी तरह से पारित किया जा सकता है (केवल पहला "आयाम" चर हो सकता है):
शून्य ArrayFunction (int aNumbers [३] [2]);
इन कार्यों को उसी तरह कहा जाता है जैसे पहले चरण में।
किसी फ़ंक्शन में चर लंबाई के सरणियों को सही ढंग से संसाधित करने में सक्षम होने के लिए, आपको या तो एक अतिरिक्त पैरामीटर के माध्यम से उनके तत्वों की संख्या को स्पष्ट रूप से पारित करना होगा, या उन सम्मेलनों का उपयोग करना होगा जो स्वयं तत्वों के मूल्यों पर प्रतिबंध लगाते हैं (एक निश्चित मूल्य सरणी के अंत का संकेत होना चाहिए)।
चरण 3
सूचक द्वारा सरणी पास करें। फ़ंक्शन तर्क सरणी के तत्वों से संबंधित प्रकार के मान के लिए एक सूचक होना चाहिए। उदाहरण के लिए:
शून्य ArrayFunction (int * pNumbers);
किसी फ़ंक्शन में डेटा तक पहुंच को सरणी तत्वों के साथ काम करने और पता अंकगणित का उपयोग करने के लिए संकेतन दोनों में किया जा सकता है:
शून्य ArrayFunction (int * pNumbers)
{
पीनंबर [0] = 10; // तत्व 0. तक पहुंच
* (pNumbers + 1) = 20; // आइटम 1 तक पहुंच
}
सावधान रहे! चूंकि फ़ंक्शन को डेटा की एक प्रति नहीं, बल्कि इसके लिए एक पॉइंटर पास किया जाता है, मूल सरणी को संशोधित किया जाएगा।
इस पद्धति का लाभ गति, कम्प्यूटेशनल संसाधनों की मितव्ययिता और एक निश्चित लचीलापन है। तो, आप लक्ष्य फ़ंक्शन को सरणी के एक मनमाना तत्व के लिए एक पॉइंटर पास करके कॉल कर सकते हैं:
शून्य कुछ फ़ंक्शन ()
{
int aNumbers = {1, 2, 3};
ऐरेफंक्शन (एक नंबर); // पूरी सरणी
ऐरेफंक्शन (और एक नंबर [1]); // दूसरे तत्व से शुरू करें
}
इस पद्धति में आमतौर पर एक अतिरिक्त पैरामीटर में उपलब्ध तत्वों की संख्या को पारित करना या एक सरणी टर्मिनेटर का उपयोग करना शामिल है।
चरण 4
एक पैरामीटर के साथ एक फ़ंक्शन को डेटा पास करें जो एक ऑब्जेक्ट या क्लास के किसी ऑब्जेक्ट का संदर्भ है जो सरणी कार्यक्षमता को लागू करता है। इस तरह के वर्ग या वर्ग टेम्पलेट आमतौर पर लोकप्रिय पुस्तकालयों और ढांचे (क्यूटी में क्यूवेक्टर, एमएफसी में कैरे, एसटीएल में एसटीडी:: वेक्टर, आदि) में पाए जाते हैं।
अक्सर ये वर्ग संदर्भ गणना के साथ एक अंतर्निहित डेटा साझा करने की रणनीति लागू करते हैं, जब डेटा संशोधित होता है (लिखने पर प्रतिलिपि) केवल एक गहरी प्रतिलिपि निष्पादित करता है। यह आपको कार्यों और विधियों के तर्कों के माध्यम से मूल्य द्वारा सरणी वस्तुओं को पारित करने के मामले में भी कम्प्यूटेशनल संसाधनों की खपत को कम करने की अनुमति देता है:
शून्य ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
शून्य कुछ फ़ंक्शन ()
{
क्यूवेक्टर ओअरे (10);
के लिए (int i = 0; i