using arrays with functions c
C ++ में फ़ंक्शंस के साथ एरर्स के बारे में जानने के लिए आपको बस इतना ही चाहिए:
इस ट्यूटोरियल में, हम चर्चा करेंगे कि C ++ में फ़ंक्शंस के साथ कैसे सरणियों का उपयोग किया जा सकता है। आम तौर पर, सरणियों को तर्कों के रूप में उसी तरह से पारित किया जा सकता है, जैसे हम कार्यों के लिए चर पास करते हैं।
लेकिन जब यह सरणियों की बात आती है तो औपचारिक मापदंडों का मूल्यांकन थोड़ा अलग होता है। वास्तव में कार्यों के लिए सरणियों के पारित होने की खोज करने से पहले, हमें एक सरणी के लिए सूचक की अवधारणा पर संक्षेप में चर्चा करने की आवश्यकता है।
=> यहाँ गहराई सी ++ प्रशिक्षण ट्यूटोरियल की जाँच करें।
आप क्या सीखेंगे:
एक सरणी के लिए सूचक
निम्न सरणी पर विचार करें जिसमें फाइबोनैचि अनुक्रम के पहले पांच नंबर हैं।
int fibSeq(5) = {1,1,2,3,5};
इस सरणी को इंगित करने के लिए एक पॉइंटर फ़ाइब्रेट घोषित करें।
int* fibPtr; fibPtr = fibSeq;
जब हम फाइबप्रॉट की सामग्री को प्रिंट करते हैं, तो आउटपुट फाइबसेक सरणी का पहला तत्व होगा। ऐसा इसलिए है क्योंकि वर्ग कोष्ठक के बिना सरणी का नाम सरणी के पहले तत्व के लिए एक सूचक का मूल्यांकन करता है। इस प्रकार उपरोक्त उदाहरण में, 'फ़ाइबसेक' नाम सरणी के पहले तत्व 'फ़ाइबसेक' की ओर इशारा करता है।
नीचे उसी का एक चित्रमय प्रतिनिधित्व है:
जैसा कि ऊपर दिए गए चित्रात्मक प्रतिनिधित्व में दिखाया गया है, फ़ाइबप्रोटे सरणी के पहले तत्व को इंगित करता है। इस प्रकार, सूचक अंकगणितीय का उपयोग करके, हम केवल फ़ाइबप्रेट का उपयोग करके सरणी के सभी तत्वों को प्रिंट कर सकते हैं।
उदाहरण के लिए, अभिव्यक्ति * (फ़ाइबप्रैट + 1) सरणी के दूसरे तत्व को इंगित करेगा और इसी तरह।
विंडोज़ पर एपीके फाइलें कैसे खोलें
आइए इसे एक कार्यक्रम में रखें और 'fibSeq' और 'fibPtr' के आउटपुट की जाँच करें:
#include #include using namespace std; int main() { int fibSeq(5) = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq(0): '<<*fibPtr; cout<<'
fibSeq(1): '<<*(fibPtr + 1); cout<<'
fibSeq(2): '<<*(fibPtr + 2); cout<<'
fibSeq(3): '<<*(fibPtr + 3); cout<<'
fibSeq(4): '<<*(fibPtr + 4); } }
आउटपुट:
fibSeq: 1 को इंगित करता है
फ़ाइबसेक (को ०): १
फ़ाइबसेक (1): १
फ़ाइबसेक (2): २
फ़ाइबसेक (3): ३
फ़ाइबसेक (4): ५
उपर्युक्त उदाहरण में, हम एक पॉइंटर वेरिएबल फ़ाइब्रेट की घोषणा करते हैं और फिर फ़ाइबरप्राट को ऐरे का नाम बताकर इसे ऐरे बनाते हैं। जब हम ऐसा करते हैं, तो हम एरेप्टर को एरे के पहले तत्व की ओर इंगित करते हैं। फिर हम एक सरणी के सभी मानों को फ़ाइबप्रेट का उपयोग करके प्रिंट करते हैं।
समारोह के लिए गुजरती हैं
जब हम फ़ंक्शन के साथ काम कर रहे होते हैं, तो हम फ़ंक्शन के लिए सरणियों को उसी तरह से पास करते हैं जैसे कि हम फ़ंक्शन को वेरिएबल पास करते हैं। लेकिन हम प्रकार के सरणी चर को पास नहीं करते हैं ()।
इसके बजाय, हम पॉइंटर को ऐरे यानि उस एरे के नाम से पास करते हैं जो एरे के पहले एलिमेंट की ओर इशारा करता है। तब औपचारिक सूचक जो इस सूचक को स्वीकार करता है, वास्तव में एक सरणी चर है। जैसा कि हम सूचक को पास करते हैं, हम सीधे फ़ंक्शन के अंदर सरणी को संशोधित कर सकते हैं।
निम्नलिखित प्रोग्राम पर विचार करें जो फ़िबोनैचि अनुक्रम में पहले पांच तत्वों के प्रत्येक तत्व के वर्ग की गणना करता है ताकि फ़ंक्शन को कार्य करने के लिए पास किया जा सके।
#include #include using namespace std; void fibSeqSquare(int fibSeq()) { for(int i=0;i<5;i++) { fibSeq(i) *= fibSeq(i); } } int main() { int fibSeq(5) = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<उपरोक्त उदाहरण में, हम एक तत्व के वर्ग की गणना फाइबोनैचि अनुक्रम में करते हैं। इस वर्ग की गणना एक फंक्शन के अंदर की जाती है। इसलिए हम मुख्य से फ़ंक्शन को कॉल करते समय फ़ंक्शन नाम 'fibSeqSquare' पास करते हैं। फ़ंक्शन के अंदर, हम प्रत्येक तत्व के वर्गों की गणना करते हैं।
जैसा कि हमने सूचक के माध्यम से सरणी के संदर्भ को पारित कर दिया है, हम फ़ंक्शन के अंदर सरणी में जो भी संशोधन करते हैं, वह सरणी को प्रतिबिंबित करेगा। इसलिए जब हम सरणी को मुख्य फ़ंक्शन में प्रिंट करते हैं, तो हमें आउटपुट के रूप में प्रत्येक तत्व के वर्ग मिलते हैं।
उपर्युक्त उदाहरण में, हमने देखा है कि फ़ंक्शन fibSeqSquare का सरणी तर्क (औपचारिक पैरामीटर) सरणी का आकार निर्दिष्ट नहीं करता है, लेकिन यह इंगित करने के लिए कि केवल वर्ग कोष्ठक (()) एक सरणी है। यह सरणी तर्कों को निर्दिष्ट करने का एक तरीका है।
औपचारिक पैरामीटर सूची में सरणी तर्क को निर्दिष्ट करने का एक अन्य तरीका वर्ग कोष्ठक के अंदर सरणी के आकार को निर्दिष्ट करके है। दोनों तर्क समान रूप से काम करते हैं। ये केवल दो तरीके हैं जिनमें हम सरणी तर्क को निर्दिष्ट करते हैं।
निम्न उदाहरण आकार के साथ निर्दिष्ट एक सरणी तर्क दिखाता है।
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<उपरोक्त उदाहरण में फाइबोनैचि अनुक्रम को प्रदर्शित करने के लिए एक फ़ंक्शन है। फ़ंक्शन में एक सरणी के रूप में एक पैरामीटर होता है जिसमें हमने सरणी का आकार भी निर्दिष्ट किया है।
हम बहुआयामी सरणियों को उसी तरह से कार्य कर सकते हैं जैसे कि ऊपर दिखाया गया है।
विंडोज़ में एक बाइनरी फ़ाइल कैसे खोलें
क्रियाओं से वापस लौटना
जब फ़ंक्शन से सरणी वापस करने की बात आती है, तो C ++ हमें फ़ंक्शन से संपूर्ण सरणी वापस करने की अनुमति नहीं देता है। हालांकि, हम एक पॉइंटर को सरणी में वापस करने के लिए एक फ़ंक्शन बना सकते हैं। लेकिन इसमें एक पकड़ है।
निम्नलिखित कोड पर विचार करें:
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< हालांकि उपरोक्त कार्यक्रम फ़ंक्शन से सरणी के पहले तत्व को पॉइंटर लौटाता है, लेकिन यह अपेक्षित रूप से प्रदर्शन नहीं करता है। हम गारंटी नहीं दे सकते कि कार्यक्रम हमें सही आउटपुट देगा। यह सही आउटपुट दे भी सकता है और नहीं भी।
ऐसा इसलिए है क्योंकि हम फ़ंक्शन से स्थानीय वैरिएबल लौटा रहे हैं और हमें यकीन नहीं है कि यह उस समय तक स्कोप में रहेगा या नहीं जब तक यह लौटा नहीं।
हॉटस्पॉट के लिए नेटवर्क सुरक्षा कुंजी क्या है
इस प्रकार, संक्षेप में, C ++ फ़ंक्शंस से लौटने वाले सरणियों का पक्ष नहीं लेता है।
अगर हमे फंक्शन से एरियर्स वापस करने की आवश्यकता है तो हमें निम्नलिखित में से किसी भी तरीके का उपयोग करना होगा:
(1) डायनामिक रूप से आवंटित एरे को वापस करना
हम सरणी सूचक को गतिशील रूप से आवंटित सरणी से वापस कर सकते हैं। हम सरणी को गतिशील रूप से आवंटित करने के लिए ऑपरेटर 'नए' का उपयोग करते हैं। जैसा कि यह एक डायनामिक ऐरे है, यह तब तक स्कोप में रहेगा जब तक हम एरे को हटा नहीं देते। इसलिए, जब हम एरे लौटाएंगे तो प्रोग्राम ठीक चलेगा।
यह निम्नलिखित उदाहरण में दिखाया गया है।
#include #include using namespace std; int* funcArray() { int* arr = new int(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< आउटपुट:
१ २ ३
# 2) स्टेटिक एरियर्स लौटना
चूंकि स्थिर चर / सरणियों का पूरे कार्यक्रम में स्कोप है, इसलिए हम फ़ंक्शंस से भी स्थिर सरणियाँ वापस कर सकते हैं। हम इसे प्रदर्शित करने के लिए एक उदाहरण ले सकते हैं। यह एकमात्र अंतर के साथ पिछले उदाहरण के समान है कि इस उदाहरण में हमने गतिशील रूप से आवंटित सरणी के बजाय एक स्थिर सरणी का उपयोग किया है।
#include #include using namespace std; int* funcArray() { static int arr(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< आउटपुट:
१ २ ३
ध्यान दें : हम एक संरचना का उपयोग इसके अंदर सरणी को लपेटने के लिए भी कर सकते हैं और फिर उस संरचना को वापस कर सकते हैं। इस तरह, हम स्वाभाविक रूप से एक फ़ंक्शन से एक सरणी लौटाएंगे। लेकिन यह सरणियों को लौटाने का एक बहुत ही संभव तरीका नहीं है।
निष्कर्ष
इस प्रकार इस ट्यूटोरियल में, हमने विस्तार से फ़ंक्शन के संबंध में सरणियों पर चर्चा की है। हमें उम्मीद है कि इस ट्यूटोरियल ने C ++ सरणियों और कार्यों के बारे में सभी संदेहों और भ्रांतियों को दूर करने में मदद की होगी।
=> यहां परफेक्ट सी ++ ट्रेनिंग गाइड देखें।
अनुशंसित पाठ