C और C++ में फंक्शन को आर्गुमेंट्स पास करने के मुख्य तरीके हैं:
1. कॉल बाय वैल्यू (Call by Value)
आर्गुमेंट की कॉपी फंक्शन को पास होती है। फंक्शन में बदलाव मूल वेरिएबल को प्रभावित नहीं करते।
उदाहरण
#include <iostream>
using namespace std;
void my_swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 10, b = 40;
cout << "(a,b) = (" << a << ", " << b << ")\n";
my_swap(a, b);
cout << "(a,b) = (" << a << ", " << b << ")\n";
return 0;
}
आउटपुट
(a,b) = (10, 40) (a,b) = (10, 40)
2. कॉल बाय एड्रेस (Call by Address / Pointer)
वेरिएबल का एड्रेस पास किया जाता है। फंक्शन पॉइंटर के माध्यम से मूल मान बदल सकता है।
उदाहरण
#include <iostream>
using namespace std;
void my_swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a = 10, b = 40;
cout << "(a,b) = (" << a << ", " << b << ")\n";
my_swap(&a, &b);
cout << "(a,b) = (" << a << ", " << b << ")\n";
return 0;
}
आउटपुट
(a,b) = (10, 40) (a,b) = (40, 10)
3. कॉल बाय रेफरेंस (Call by Reference) - केवल C++
रेफरेंस वेरिएबल (&) पास किया जाता है। सिंटैक्स सरल है, पॉइंटर की आवश्यकता नहीं।
उदाहरण
#include <iostream>
using namespace std;
void my_swap(int &x, int &y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 10, b = 40;
cout << "(a,b) = (" << a << ", " << b << ")\n";
my_swap(a, b);
cout << "(a,b) = (" << a << ", " << b << ")\n";
return 0;
}
आउटपुट
(a,b) = (10, 40) (a,b) = (40, 10)
तुलना तालिका
| विशेषता | कॉल बाय वैल्यू | कॉल बाय एड्रेस | कॉल बाय रेफरेंस |
|---|---|---|---|
| मूल मान बदलता है? | नहीं | हाँ | हाँ |
| सिंटैक्स | सरल | पॉइंटर उपयोग | & चिह्न उपयोग |
| उपलब्धता | C, C++ | C, C++ | केवल C++ |
| NULL पास कर सकते हैं? | नहीं | हाँ | नहीं (रेफरेंस NULL नहीं हो सकता) |