मुझे पता है कि जब हम किसी फ़ंक्शन के नाम को मान के रूप में उपयोग करते हैं, तो फ़ंक्शन स्वचालित रूप से एक पॉइंटर में परिवर्तित हो जाता है। निम्नलिखित कोड को देखो:फंक्शन पॉइंटर असाइनमेंट और सी ++ में कॉल करें?
int print(int a)
{
return a;
}
int main()
{
int (*p)(int) = print;
int (*q)(int) = &print;
cout << p(8) << endl;
cout << (*p)(8) << endl;
}
क्यों int (*p)(int) = print;
हैं, प्रिंट एक सूचक है, और int (*p)(int) = &print;
, & प्रिंट एक सूचक के लिए एक भाषण, बराबर है?
दूसरी ओर, जब हम फ़ंक्शन को कॉल करने के लिए किसी फ़ंक्शन में पॉइंटर का उपयोग करते हैं, तो p(8)
और (*p)(8)
समकक्ष क्यों हैं?
मैं इसे लगता है कि सिर्फ सुविधा के लिए है , फ़ंक्शन को कॉल करने के लिए उन्हें उपयोग करते समय आपको फ़ंक्शन पॉइंटर्स को स्पष्ट रूप से अव्यवस्थित करना होगा। यदि आप 'typedefs' का उपयोग करते हैं तो आप किसी भी' * 'का उपयोग किए बिना फ़ंक्शन पॉइंटर के साथ काम कर सकते हैं, जो इमो बहुत अच्छा है – user463035818
संभावित डुप्लिकेट [फ़ंक्शन पॉइंटर का डिफ्रेंसिंग कैसे होता है?] (Http://stackoverflow.com/questions/2795575/कैसे-करता-एक-फ़ंक्शन-पॉइंटर-होता है) –
@ सिमोनक्रैमर धन्यवाद। लेकिन लिंक केवल उन्मूलन की व्याख्या करता है, मेरे प्रश्न में फ़ंक्शन पॉइंटर का असाइनमेंट भी शामिल है। – sydridgm