प्रोग्रामिंग लैंग्वेज अक्सर प्रोग्राम के विभिन्न हिस्सों के बीच जानकारी पास करने के लिए तर्कों की अवधारणा पर निर्भर करती हैं। सी प्रोग्रामिंग के संदर्भ में, वास्तविक तर्कों और औपचारिक मापदंडों के बीच अंतर को समझना महत्वपूर्ण है। यह लेख वास्तविक तर्कों और औपचारिक मापदंडों, उनके उद्देश्य, अंतरों और उन्हें प्रभावी ढंग से उपयोग करने के लिए सर्वोत्तम प्रथाओं के विवरण में तल्लीन करेगा।
![]() |
actual argument and formal argument in c in hindi |
परिचय
प्रोग्रामिंग के दायरे में, एक तर्क एक मान या अभिव्यक्ति को संदर्भित करता है जो किसी फ़ंक्शन या विधि को पारित किया जाता है। ये तर्क प्रोग्राम के एक हिस्से से दूसरे हिस्से में डेटा या निर्देशों के हस्तांतरण को सक्षम करते हैं, मॉड्यूलरिटी और पुन: प्रयोज्यता को बढ़ाते हैं। सी प्रोग्रामिंग में, कुशल और लचीले कोड लिखने के लिए तर्कों के उपयोग में महारत हासिल करना मौलिक है।
वास्तविक तर्क
वास्तविक तर्क, जिन्हें वास्तविक पैरामीटर या तर्क के रूप में भी जाना जाता है, वे मान या भाव हैं जो किसी फ़ंक्शन को कॉल करते समय प्रदान किए जाते हैं। वे वास्तविक डेटा का प्रतिनिधित्व करते हैं जिसे फ़ंक्शन के भीतर संचालित किया जाएगा। वास्तविक तर्कों का प्राथमिक उद्देश्य फ़ंक्शन के तर्क को सही ढंग से निष्पादित करने के लिए आवश्यक आवश्यक जानकारी प्रदान करना है।
C में किसी फ़ंक्शन को कॉल करते समय, वास्तविक तर्क कोष्ठक में निर्दिष्ट किए जाते हैं और अल्पविराम द्वारा अलग किए जाते हैं। उदाहरण के लिए:
int result = addNumbers(5, 10);
इस मामले में, मान5 और10 को पास किए गए वास्तविक तर्क हैंaddNumbers समारोह।
औपचारिक पैरामीटर
औपचारिक पैरामीटर, जिन्हें औपचारिक तर्क भी कहा जाता है, फ़ंक्शन की परिभाषा के भीतर प्लेसहोल्डर होते हैं जो वास्तविक तर्कों से प्राप्त होने वाले मानों का प्रतिनिधित्व करते हैं। वे फ़ंक्शन के दायरे में चर के रूप में कार्य करते हैं, वास्तविक तर्कों द्वारा उन्हें दिए गए मानों को लेते हुए। औपचारिक पैरामीटर कार्यों को अधिक सामान्य और पुन: प्रयोज्य तरीके से लिखे जाने की अनुमति देते हैं।
औपचारिक मापदंडों को उनके प्रकार और नाम को निर्दिष्ट करते हुए, फ़ंक्शन के प्रोटोटाइप या परिभाषा के भाग के रूप में घोषित किया जाता है। उदाहरण के लिए:
int addNumbers(int num1, int num2) {
return num1 + num2;
}
इस समारोह में,संख्या 1 औरnum2 औपचारिक पैरामीटर हैं जो फ़ंक्शन कॉल किए जाने पर वास्तविक तर्कों के रूप में पारित मान प्राप्त करते हैं।
वास्तविक तर्क और औपचारिक पैरामीटर के बीच अंतर
सही और कुशल कोड लिखने के लिए वास्तविक तर्कों और औपचारिक मापदंडों के बीच अंतर को समझना महत्वपूर्ण है। यहाँ कुछ प्रमुख भेद हैं:
परिवर्तनशीलता और परिवर्तनशीलता
वास्तविक तर्क डिफ़ॉल्ट रूप से अपरिवर्तनीय होते हैं। एक बार असाइन किए जाने के बाद, उनके मान फ़ंक्शन के भीतर नहीं बदले जा सकते। दूसरी ओर, औपचारिक पैरामीटर फ़ंक्शन के भीतर स्थानीय चर के रूप में कार्य करते हैं और आवश्यकतानुसार संशोधित किए जा सकते हैं।
मेमोरी आवंटन और भंडारण
वास्तविक तर्क आमतौर पर फ़ंक्शन के बाहर स्मृति स्थानों में संग्रहीत होते हैं। इसके विपरीत, औपचारिक मापदंडों को फ़ंक्शन के स्टैक फ्रेम के भीतर मेमोरी आवंटित की जाती है।
स्कोप और लाइफटाइम
वास्तविक तर्क केवल फ़ंक्शन कॉल के दौरान मौजूद होते हैं और फ़ंक्शन के निष्पादन को पूरा करने के बाद नष्ट हो जाते हैं। औपचारिक पैरामीटर, स्थानीय चर होने के नाते, फ़ंक्शन के भीतर एक सीमित दायरा और जीवनकाल होता है।
मूल्य और संदर्भ द्वारा तर्क पास करना
सी में, तर्कों को मूल्य या संदर्भ द्वारा कार्यों में पारित किया जा सकता है, प्रत्येक इसके फायदे और विचार के साथ।
मूल्य द्वारा तर्क पारित करना
डिफ़ॉल्ट रूप से, सी "पास बाय वैल्यू" तंत्र का उपयोग करता है, जहां वास्तविक तर्कों के मूल्यों को औपचारिक पैरामीटर में कॉपी किया जाता है। फ़ंक्शन के भीतर औपचारिक पैरामीटर में किए गए कोई भी संशोधन वास्तविक तर्कों के मूल मानों को प्रभावित नहीं करते हैं।
जब आप मूल मूल्यों की अपरिवर्तनीयता सुनिश्चित करना चाहते हैं और अनपेक्षित दुष्प्रभावों से बचना चाहते हैं, तो तर्कों को मूल्य से पास करना उपयोगी होता है। हालांकि, यह बड़ी डेटा संरचनाओं की प्रतिलिपि बनाने के ऊपरी हिस्से में आता है।
संदर्भ द्वारा तर्क पारित करना
C में संदर्भ द्वारा तर्क पारित करने के लिए पॉइंटर्स का उपयोग किया जाता है। वास्तविक तर्क के पते को पास करके, फ़ंक्शन मूल डेटा को सीधे एक्सेस और संशोधित कर सकता है। इस मामले में औपचारिक पैरामीटर में किए गए परिवर्तन फ़ंक्शन के बाहर वास्तविक तर्कों को प्रभावित करते हैं।
बड़ी डेटा संरचनाओं के लिए तर्कों को संदर्भ द्वारा पास करना कुशल है, क्योंकि यह अनावश्यक प्रतिलिपि से बचा जाता है। हालाँकि, अमान्य मेमोरी एक्सेस और अनपेक्षित संशोधनों को रोकने के लिए इसे सावधानीपूर्वक संभालने की आवश्यकता है।
सामान्य नुकसान और सर्वोत्तम अभ्यास
वास्तविक तर्कों और औपचारिक मापदंडों के साथ काम करते समय, सामान्य कमियों से अवगत होना और सर्वोत्तम प्रथाओं का पालन करना आवश्यक है:
- किसी फ़ंक्शन को कॉल करते समय हमेशा आवश्यक तर्क प्रदान करें। गुम तर्क अपरिभाषित व्यवहार और प्रोग्राम क्रैश का कारण बन सकते हैं।
- सुनिश्चित करें कि वास्तविक तर्कों के प्रकार अपेक्षित प्रकार के औपचारिक मापदंडों से मेल खाते हैं। बेमेल तर्क प्रकार तार्किक त्रुटियाँ और अनपेक्षित परिणाम पैदा कर सकते हैं।
- वास्तविक तर्कों के रूप में गैर-प्रारंभिक चरों का उपयोग करने से बचें, क्योंकि उनमें कचरा मूल्य हो सकते हैं जो अपरिभाषित व्यवहार का कारण बन सकते हैं।
- संदर्भ द्वारा तर्क पारित करते समय, मेमोरी आवंटन और डीलोकेशन के प्रति सचेत रहें। अनुचित प्रबंधन के परिणामस्वरूप मेमोरी लीक या सेगमेंटेशन दोष हो सकते हैं।
निष्कर्ष
प्रभावी और बग-मुक्त सी प्रोग्राम लिखने के लिए वास्तविक तर्कों और औपचारिक मापदंडों के बीच अंतर को समझना महत्वपूर्ण है। वास्तविक तर्क किसी फ़ंक्शन को कॉल करते समय पास किए गए मानों का प्रतिनिधित्व करते हैं, जबकि औपचारिक पैरामीटर उन मानों को प्राप्त करने के लिए प्लेसहोल्डर के रूप में कार्य करते हैं। अंतरों को समझकर और यह जानकर कि तर्कों को मूल्य या संदर्भ के आधार पर कब पास करना है, आप अपने कोड की प्रतिरूपकता और लचीलेपन को बढ़ा सकते हैं।
पूछे जाने वाले प्रश्न
यदि मैं C में किसी फ़ंक्शन के लिए कोई तर्क नहीं देता तो क्या होता है?
यदि किसी फ़ंक्शन को मापदंडों के साथ परिभाषित किया गया है, लेकिन कोई तर्क प्रदान किए बिना कॉल किया जाता है, तो मापदंडों में कचरा मान होगा। इन गैर-प्रारंभिक मानों का उपयोग करने से अपरिभाषित व्यवहार हो सकता है।
क्या मैं सी में किसी फ़ंक्शन के तर्क के रूप में सरणी पास कर सकता हूं?
हां, आप सी में किसी फ़ंक्शन के तर्क के रूप में सरणी पास कर सकते हैं। सरणी नाम को इसके पहले तत्व के सूचक के रूप में माना जाता है, जिससे आप फ़ंक्शन के भीतर सरणी की सामग्री के साथ काम कर सकते हैं।
मैं सी कार्यों में विभिन्न प्रकार के तर्कों को कैसे संभाल सकता हूं?
सी अलग-अलग तर्कों को संभालने के लिए अंतर्निहित समर्थन प्रदान नहीं करता है। हालाँकि, आप इसका उपयोग करके इसे प्राप्त कर सकते हैंstdarg.h हेडर और फ़ंक्शन जैसेva_start,va_arg, औरva_end.
कॉल बाय वैल्यू और कॉल बाय रेफरेंस में क्या अंतर है?
कॉल बाय वैल्यू में फ़ंक्शन के तर्क के मान को पारित करना शामिल है, फ़ंक्शन के भीतर मान की प्रतिलिपि बनाना। संदर्भ द्वारा कॉल, दूसरी ओर, तर्क के मेमोरी एड्रेस को पास करना शामिल है, जिससे फ़ंक्शन को मूल मान को सीधे संशोधित करने की अनुमति मिलती है।
संदर्भ द्वारा तर्क पारित करते समय मैं उचित स्मृति विलोपन कैसे सुनिश्चित कर सकता हूं?
संदर्भ द्वारा तर्क पारित करते समय, सुनिश्चित करें कि उचित स्मृति आवंटन और विलोपन किया जाता है। यदि डायनेमिक मेमोरी आवंटन शामिल है, तो उपयोग करेंmalloc स्मृति आवंटित करने के लिए औरमुक्त जब इसकी आवश्यकता न हो तो इसे हटा दें।