Function parameters और arguments
पिछले lesson में आपने सिखा की function अपने caller को कोई value return कर सकता है ।
अकसर ये ज़रूरी हो जाता है की call किये गये function को कोई value दिया जाये या pass किया जाये, ताकि function उस value के साथ कुछ कर सके । उदाहरण के लिए, यदि हम कोई ऐसा function लिखना चाहते हैं जो दिए गये दो numbers को add करता है, तो हमे function को कोई दो numbers pass करने होंगे जिन्हें वो add करेगा अर्थात जोड़ेगा । नहीं तो function को पता कैसे चलेगा की किन numbers को जोड़ना है ? किसी function को parameters और arguments की सहायता से value pass किया जाता है ।
Function parameter एक variable होता है जहां caller द्वारा दिए गए value को store किया जाता है । Function parameters को इसके (function के) नाम के बाद parenthesis ( () ) में रखा जाता है । यदि parameters एक से ज्यादा हों तो इन्हें comma (,) से अलग किया जाता है ।
नीचे कुछ ऐसे functions दिए गये हैं जिनमे parameters की संख्या अलग-अलग है:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// ये function कोई parameter नहीं लेता // ये caller से किसी value की अपेक्षा नहीं करता void doPrint() { std::cout << "In doPrint()" << std::endl; } // ये function x नाम का एक integer parameter लेता है // caller इसे एक value pass करेगा जो x पे store होगा void printValue(int x) { std::cout << x << std::endl; } // इस function में दो parameters हैं, पहला x और दूसरा y // caller को x और y, दोनों के लिए values pass करना होगा int add(int x, int y) { return x + y; } |
Argument वो value है जो किसी caller द्वारा , call किये गये function को उसके parameters के value के रूप में pass किया जाता है:
1 2 |
printValue(6); // यहाँ 6 एक argument है जिसे printValue() के पास भेजा जा रहा है add(2, 3); // 2 और 3, function add() के पास भेजे जा रहे arguments हैं |
ध्यान दे की एक से ज्यादा arguments भी comma (,) से अलग किये जाते हैं । Arguments की संख्या, call किये जा रहे function के parameters की संख्या के बराबर होने चाहिए । ऐसा ना होने पर compiler error देगा ।
Parameters और arguments साथ में काम कैसे करते हैं
जब किसी function को call किया जाता है, उस function के सारे parameters variables में बदल जाते हैं और caller से pass किया गया हर argument, इसके matching parameter में copy कर लिया जाता है । इस process (प्रक्रिया) को pass by value के नाम से जाना जाता है ।
उदाहरण के लिए:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//#include "stdafx.h" // Visual Studio users इसे uncomment करें #include <iostream> // इस function में दो integer parameters हैं, पहला x और दूसरा y // x और y के values arguments के रूप में caller pass करेगा void printValues(int x, int y) { std::cout << x << std::endl; std::cout << y << std::endl; } int main() { printValues(6, 7); // इस function call में दो arguments दिए गये हैं, 6 और 7 return 0; } |
जब printValues() function, arguments 6 और 7 के साथ call किया जाता है तो printValues का parameter x variable बन जाता है और इसे value 6 assign कर दिया जाता है । printValues का parameter y variable बन जाता है और इसे 7 assign कर दिया जाता है ।
इस program का output:
6 7
Parameters और return values का साथ में काम करना
Parameters और एक return value का इस्तेमाल करते हुए हम ऐसे functions बना सकते हैं जो input के रूप में caller से डाटा लेता हो, उस डाटा पर कोई calculation करता हो और calculated value को वापस caller को return कर देता हो ।
यहाँ एक आसान सा function दिया गया है जो दिए गये दो numbers को जोड़ता है और result caller को return करता है:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//#include "stdafx.h" // Visual Studio users इसे uncomment करें #include <iostream> // add() इसके parameters के रूप में दो integers लेता है और उन्हें जोडकर result caller को return करता है // x और y parameters के values argument के रूप में add() सेट करता है int add(int x, int y) { return x + y; } // main कोई parameter नहीं लेता int main() { std::cout << add(4, 5) << std::endl; // Arguments 4 और 5 function add() को pass किये जा रहे हैं return 0; } |
जब function add() को call किया जाता है, parameter x को value 4 assign कर दिया जाता है और इसी क्रम में parameter y को value 5 assign कर दिया जाता है ।
इसके बाद function add() x + y को evaluate करता है, जिसका result 9 आएगा, और फिर इस value को return statement के द्वारा main() के पास भेज देता है । फिर main function में value (जो की यहाँ 9 है) को print करने के लिए इसे cout के पास भेज दिया जाता है ।
Output:
9
चित्रित रूप में:
और अधिक examples
आइये कुछ और function calls पर नज़र डालें:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//#include "stdafx.h" // Visual Studio users इसे uncomment करें #include <iostream> int add(int x, int y) { return x + y; } int multiply(int z, int w) { return z * w; } int main() { using namespace std; cout << add(4, 5) << endl; // add() में, x=4, y=5, इसलिए x+y=9 cout << multiply(2, 3) << endl; // multiply() में, z=2, w=3, इसलिए z*w=6 // हम expressions के भी values pass कर सकते हैं cout << add(1 + 2, 3 * 4) << endl; // add() में, x=3, y=12, इसलिए x+y=15 // हम variables के values भी pass कर सकते हैं int a = 5; cout << add(a, a) << endl; // evaluate होकर (5 + 5) देगा cout << add(1, multiply(2, 3)) << endl; // evaluate होकर 1 + (2 * 3) देगा cout << add(1, add(2, 3)) << endl; // evaluate होकर 1 + (2 + 3) देगा return 0; } |
इस program का output:
9 6 15 10 7 6
पहले के दो statements आसानी से समझ आते है ।
तीसरे statement में, parameters खुद expressions हैं जो pass किए जाने से पहले evaluate होते हैं । यहाँ 1 + 2 evaluate होकर 3 देता है, इसलिए x को value 3 pass किया जाता है । 3 * 4 evaluate होकर 12 देता है, इसलिए y को value 12 pass किया जाता है । add(3, 12) result के रूप में 15 return करता है ।
अगला statement भी बिलकुल इसी तरह आसान है:
1 2 |
int a = 5; cout << add(a, a) << endl; // evaluate हो कर (5 + 5) देगा |
यहाँ add() में x = a और y = a assign किया जाता है । क्यूंकि a = 5 है, add(a, a) = add(5, 5) होगा, जिसका result 10 आएगा ।
इससे अगला statement थोडा घुमाऊ है:
1 |
cout << add(1, multiply(2, 3)) << endl; // evaluate होकर 1 + (2 * 3) देगा |
जब function add() execute होगा, CPU को parameters x और y का value मालूम होना चाहिए । x आसानी से समझ आ जायेगा क्यूंकि हमने इसे value के रूप में integer 1 सीधे-सीधे pass किया है, इसलिए x=1 । y के value के लिए, CPU को multiply(2, 3) को पहले evaluate करना होगा । यहाँ CPU कुछ इस प्रकार का assignment करता है: z = 2 और w = 3, और इस तरह multiply(2, 3) एक integer value 6 return करता है । अब ये value 6 add() function के y parameter के value के रूप में assign किया जा सकता है । add(1, 6) integer 7 return करता है, जो print होने के लिए cout के पास भेज दिया जाता है ।
कम शब्दों में, (यहाँ => symbol का प्रयोग evaluations दिखाने के लिए किया गया है):
add(1, multiply(2, 3)) => add(1, 6) => 7
नीचे दिया गया function भी आपको परेशान कर सकता है क्यूंकि दिए गए parameters में से एक parameter खुद add() function को call करता है:
1 |
cout << add(1, add(2, 3)) << endl; // evaluate हो कर 1 + (2 + 3) देगा |
लेकिन ये भी बिलकुल वैसा ही है जैसे पिछले statement में एक parameter के रूप में multiply() को call किया गया था:
इससे पहले की CPU add() के सबसे बाहरी call को evaluate करे, इसे पहले add(2, 3) को evaluate करना होगा । add(2, 3) evaluate होकर 5 देता है । अब CPU add(1, 5) को evaluate कर सकता है, जो value 6 return करेगा । अब इस value 6 को main में cout के पास भेजा जायेगा ।
कम शब्दों में:
add(1, add(2, 3)) => add(1, 5) => 6
निष्कर्ष
Functions को फिर से इस्तेमाल करने लायक बनाने के लिए parameters काफी महत्वपूर्ण हैं, क्यूंकि ये function का कोई विशेष input पहले से जाने बिना किसी task को पूरा करने की अनुमति देते हैं । वे input values बाद में किसी function (caller) के arguments के रूप में दिए जाते हैं ।
Return value functions को एक value return करने की अनुमति देता है ।
Quiz
1) Program के इस भाग में क्या गलत है?
1 2 3 4 5 6 7 8 9 10 |
void multiply(int x, int y) { return x * y; } int main() { cout << multiply(4, 5) << endl; return 0; } |
2) इस program में कौन सी दो चीजें गलत हैं?
1 2 3 4 5 6 7 8 9 10 |
int multiply(int x, int y) { int product = x * y; } int main() { cout << multiply(4) << endl; return 0; } |
3) ये program क्या print करेगा?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> int add(int x, int y, int z) { return x + y + z; } int multiply(int x, int y) { return x * y; } int main() { using namespace std; cout << multiply(add(1, 2, 3), 4) << endl; return 0; } |
4) एक function doubleNumber() लिखें, जो केवल एक integer parameter लेगा और इसपर कोई calculation कर caller को pass किये गए value का दुगुना return करेगा ।
5) एक पूरा program लिखें जो यूजर से एक integer value लेगा (cin की सहायता से, 1.3a -- cout, cin, endl, std namespace और using statements पर एक नज़र lesson में इसके बारे में बताया गया है), doubleNumber() function के इस्तेमाल से इसे दोगुना करेगा जिसे आपने question 4 में लिखा है, और फिर दोगुना किया गया value cout की मदद से console पर print करेगा ।
Quiz Answers
Answers देखने के लिए नीचे के areas को अपने mouse से select करें ।
Note: आपको #4 and #5 के लिए दिए गये solution से अलग solutions भी ज़रूर मिलेंगे । अकसर C++ में किसी problem को solve करने के एक से ज्यादा तरीके होते हैं ।
![]() |
![]() |
![]() |
In Hindi it's awesome but please add more tutorial on it.....
Tutorials को पूरा करने का प्रयास जारी है । यहाँ प्रत्येक दिन एक section का translation पोस्ट किया जायेगा । यदि आपको हिंदी version पसन्द आया है तो आप इन आर्टिकल्स को social networking sites पर share कर सकते हैं, ताकि आपके friends भी इसका लाभ ले सके ।