फ़ंक्शन पॉइंटर
फ़ंक्शन को तर्क के रूप में पास करें
फ़ंक्शन पॉइंटर, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
फ़ंक्शन पॉइंटर क्या है
फ़ंक्शन पॉइंटर किसी फ़ंक्शन का पता संग्रहीत करता है, ताकि आप उसे अप्रत्यक्ष रूप से कॉल कर सकें या डेटा की तरह इधर-उधर पास कर सकें।
- इसका प्रकार सिग्नेचर को दर्शाता है।
- यह फ़ंक्शनों को व्यवहार को पैरामीटर के रूप में लेने देता है।
#include <iostream>
int add(int a, int b) { return a + b; }
int main() {
int (*op)(int, int) = add;
std::cout << op(3, 4) << '\n';
return 0;
}प्रकार घोषित करना
घोषणा int (*op)(int, int) का अर्थ है: op एक ऐसे फ़ंक्शन का पॉइंटर है जो दो int मान लेता है और एक int लौटाता है। *op के चारों ओर के कोष्ठक आवश्यक हैं।
#include <iostream>
int square(int x) { return x * x; }
int main() {
int (*fn)(int) = square;
std::cout << fn(5) << '\n';
return 0;
}पॉइंटर के माध्यम से कॉल करना
आप फ़ंक्शन पॉइंटर को फ़ंक्शन की तरह ही कॉल करते हैं। आप उसे स्पष्ट रूप से डीरेफ़रेंस भी कर सकते हैं, लेकिन इसकी शायद ही कभी आवश्यकता होती है।
#include <iostream>
void greet() { std::cout << "Hello\n"; }
int main() {
void (*g)() = greet;
g();
(*g)();
return 0;
}फ़ंक्शनों को आर्ग्युमेंट के रूप में पास करना
कोई फ़ंक्शन फ़ंक्शन पॉइंटर पैरामीटर स्वीकार कर सकता है, जिससे कॉल करने वाला अपने अनुसार व्यवहार जोड़ सकता है।
#include <iostream>
int apply(int x, int (*fn)(int)) { return fn(x); }
int doubler(int n) { return n * 2; }
int main() {
std::cout << apply(10, doubler) << '\n';
return 0;
}रनटाइम पर चयन करना
फ़ंक्शन पॉइंटर एक चर होता है, इसलिए प्रोग्राम के चलने के दौरान आप तय कर सकते हैं कि किस फ़ंक्शन को कॉल करना है।
#include <iostream>
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int main() {
bool wantAdd = true;
int (*op)(int, int) = wantAdd ? add : sub;
std::cout << op(8, 3) << '\n';
return 0;
}फ़ंक्शन पॉइंटर की सारणियाँ
किसी मान के आधार पर एक सरल डिस्पैच तालिका बनाने के लिए कई फ़ंक्शन पॉइंटर को एक सारणी में संग्रहीत करें।
#include <iostream>
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
int main() {
int (*ops[2])(int, int) = {add, mul};
std::cout << ops[0](2, 3) << ' ' << ops[1](2, 3) << '\n';
return 0;
}typedef का उपयोग करना
पॉइंटर का सिंटैक्स बहुत जटिल होता है। typedef या using उपनाम इस प्रकार को एक पढ़ने योग्य नाम देता है।
#include <iostream>
using BinOp = int(*)(int, int);
int add(int a, int b) { return a + b; }
int main() {
BinOp op = add;
std::cout << op(6, 7) << '\n';
return 0;
}एल्गोरिदम के साथ फ़ंक्शन पॉइंटर
मानक एल्गोरिदम कॉल करने योग्य वस्तुएँ स्वीकार करते हैं और एक साधारण फ़ंक्शन भी ऐसी वस्तु के रूप में काम करता है। यहाँ एक प्रेडिकेट सम संख्याओं की गिनती करता है।
#include <iostream>
#include <vector>
#include <algorithm>
bool isEven(int n) { return n % 2 == 0; }
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6};
int c = std::count_if(v.begin(), v.end(), isEven);
std::cout << "Evens: " << c << '\n';
return 0;
}सीमा: कोई स्थिति नहीं
एक साधारण फ़ंक्शन पॉइंटर अपने साथ कैप्चर किया हुआ कोई डेटा नहीं रख सकता। यदि आपको कॉल के बीच संदर्भ याद रखना हो, तो आपको ग्लोबल का उपयोग करना होगा या अधिक सक्षम कॉल करने योग्य वस्तुओं पर जाना होगा।
#include <iostream>
int counter = 0;
int next() { return ++counter; }
int main() {
int (*fn)() = next;
std::cout << fn() << ' ' << fn() << ' ' << fn() << '\n';
return 0;
}कैप्चर-रहित लैम्ब्डा में रूपांतरण
जो लैम्ब्डा कुछ भी कैप्चर नहीं करता, वह मिलते-जुलते फ़ंक्शन पॉइंटर में अप्रत्यक्ष रूप से परिवर्तित हो सकता है। छोटी इनलाइन फ़ंक्शन के लिए यह उपयोगी है।
#include <iostream>
int main() {
int (*fn)(int) = [](int x) { return x + 100; };
std::cout << fn(1) << '\n';
return 0;
}शून्य फ़ंक्शन पॉइंटर
फ़ंक्शन पॉइंटर nullptr हो सकता है, जिसका अर्थ है कि वह किसी चीज़ की ओर संकेत नहीं करता। अपरिभाषित व्यवहार से बचने के लिए कॉल करने से पहले हमेशा इसकी जाँच करें।
#include <iostream>
int main() {
int (*fn)(int) = nullptr;
if (fn) {
std::cout << fn(5) << '\n';
} else {
std::cout << "No function set\n";
}
return 0;
}त्वरित जाँच
फ़ंक्शन पॉइंटर की सीमाओं की अपनी समझ का परीक्षण करें।
पुनरावलोकन
आपने फ़ंक्शन पॉइंटर के बारे में सीखा:
- वे किसी फ़ंक्शन का पता रखते हैं और फ़ंक्शन की तरह कॉल किए जाते हैं
- वे आपको व्यवहार को पैरामीटर के रूप में पास करने और डिस्पैच तालिकाएँ बनाने देते हैं
- उपनाम उनके प्रकार को पढ़ने योग्य बनाते हैं
- वे स्थिति नहीं रख सकते, लेकिन कैप्चर-रहित लैम्ब्डा उनमें परिवर्तित हो सकते हैं
अब आप std::function से परिचित होंगे, जो स्थिति रखने वाली वस्तुओं सहित किसी भी कॉल करने योग्य वस्तु को संग्रहीत कर सकता है।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “फ़ंक्शन पॉइंटर” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “फ़ंक्शन पॉइंटर” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“फ़ंक्शन पॉइंटर” में मैं क्या सीखूँगा?
फ़ंक्शन को तर्क के रूप में पास करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“फ़ंक्शन पॉइंटर” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- फ़ंक्शन पॉइंटर
- std::function
- std::bind
- कॉल करने योग्य चीज़ों का चयन