c++ - Function pointers usage -


संभव डुप्लिकेट:

हाय सब, क्यों ये दो कोड एक ही आउटपुट देते हैं, केस 1:

  #include & lt; stdio.h & gt; टाइपफीफ़ शून्य (* mycall) (int a, int b); शून्य ऐडमी (int a, int b); शून्य म्यूल्मे (int a, int b); शून्य subme (int a, int b); मुख्य () {mycall x [10]; एक्स [0] = & amp; addme; एक्स [1] = & amp; subme; X [2] = & amp; mulme; (एक्स [0]) (5,2); (एक्स [1]) (5,2); (एक्स [2]) (5,2); } शून्य एडेम (int a, int b) {printf ("मान% d \ n" है, (a + b)); } शून्य म्यूल्मे (int a, int b) {printf ("मान% d \ n" है, (a * b)); } शून्य subme (int a, int b) {printf ("मान है% d \ n", (a-b)); }  

आउटपुट:

  मान 7 है मान 3 है मान 10 है  

केस 2:

<पूर्व> #include & lt; stdio.h & gt; टाइपफीफ़ शून्य (* mycall) (int a, int b); शून्य ऐडमी (int a, int b); शून्य म्यूल्मे (int a, int b); शून्य subme (int a, int b); मुख्य () {mycall x [10]; एक्स [0] = & amp; addme; एक्स [1] = & amp; subme; X [2] = & amp; mulme; (* एक्स [0]) (5,2); (* एक्स [1]) (5,2); (* एक्स [2]) (5,2); } शून्य एडेम (int a, int b) {printf ("मान% d \ n" है, (a + b)); } शून्य म्यूल्मे (int a, int b) {printf ("मान% d \ n" है, (a * b)); } शून्य subme (int a, int b) {printf ("मान है% d \ n", (a-b)); }

आउटपुट:

  मान 7 है मान 3 है मान 10  

मैं यह दिखाने के लिए आपके प्रश्न को आसान बनाऊँगा कि मैं क्या सोचता हूं।

दिये गये

  टाइप किए गएफ़ शून्य (* mycall) (int a, int b); Mycall f = somefunc;  

आप जानना चाहते हैं कि क्यों

  (* f) (5, 2);  

और

  f (5.2);  

एक ही काम करते हैं इसका उत्तर यह है कि फ़ंक्शन का नाम दोनों "फ़ंक्शन डिज़िनेटर" का प्रतिनिधित्व करते हैं मानक से:

  "एक फ़ंक्शन डिज़िनेएटर एक अभिव्यक्ति है जिसमें फ़ंक्शन का प्रकार है। सिवाय इसके कि जब यह आकार ऑपरेटर या यूनरी एंड ऑपरेटर का ऑपरेंड होता है, तो फ़ंक्शन डिज़ाइनर के साथ प्रकार '' फ़ंक्शन रिटर्निंग टाइप '' एक अभिव्यक्ति में कनवर्ट किया गया है जिसमें टाइप '' पॉइंटर फॉर रिटर्निंग प्रकार फ़ंक्शन करने के लिए '' है। "  

जब आप फ़ंक्शन पॉइंटर पर इंडिरेक्शन ऑपरेटर * का उपयोग करते हैं, तो यह dereference एक "फ़ंक्शन डिज़िनेटर" भी होता है। मानक से:

  "unary * ऑपरेटर indirection को इंगित करता है। यदि ऑपरेंड एक फ़ंक्शन को इंगित करता है, तो परिणाम एक फ़ंक्शन डिज़नीएटर है; ..."  
< P> तो f (5,2) अनिवार्य रूप से (* f) (5,2) पहले नियम से हो जाता है यह हो जाता है कि कॉल द्वारा दूसरे के द्वारा पैराम्स (5,2) के साथ नामित फ़ंक्शन को कॉल करें नतीजा यह है कि f (5,2) और (* f) (5,2) एक ही काम करते हैं।


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -