2017-07-27 43 views
5

मान लीजिए मैं इस कोड है:किसी पूर्णांक पर एक सदस्य सूचक के मुद्रण परिभाषित

#include <iostream> 

struct Mine 
{ 
    int a; 
    int b; 
}; 


int main() 
{ 

    int Mine::* memberPointerA = &Mine::a; 
    int Mine::* memberPointerB = &Mine::b; 



    std::cout << memberPointerA; 
    std::cout << "\n"; 
    std::cout << memberPointerB; 
} 

जब मैं इस माइक्रोसॉफ्ट विज़ुअल सी ++ (2015)

मैं निम्नलिखित आउटपुट प्राप्त के साथ चलाने के

1 
1 

1 
2 
:

उत्पादन मैं उम्मीद इस तरह कुछ और है

तो यह सवाल पूछता है: क्या सदस्य सूचक के इस मुद्रण को परिभाषित किया गया है?

उत्तर

12

पॉइंटर से bool पर एक निर्धारित रूपांतरण है। चूंकि सदस्य परिवर्तनीय पॉइंटर्स NULL नहीं हैं, इसलिए वे 1 के रूप में सत्य और प्रिंट के रूप में मूल्यांकन करते हैं।

+0

ओह .... यह समझ में आता है (मुझे बस एहसास हुआ कि यह शायद जैसा कि आपने उत्तर दिया था) – DarthRubik

7

हाथ में मुख्य मुद्दा यह है कि एक पॉइंटर-टू-सदस्य को void* में परिवर्तित नहीं किया जा सकता है, जो आमतौर पर प्रिंटिंग पॉइंटर्स को संभालने वाले अधिभार को लेता है।

इस प्रकार, अगला सबसे अच्छा रूपांतरण उपयोग किया जाता है, जो रूपांतरण सूचक->bool है। दोनों पॉइंटर्स शून्य पॉइंटर्स नहीं हैं, इस प्रकार आपको आउटपुट मिलता है।

यदि आप "सामान्य" पॉइंटर्स (सदस्य के पॉइंटर्स के विपरीत) को प्रिंट करने का प्रयास करते हैं, तो आपको प्रारंभिक रूप से अपेक्षित चीज़ों के साथ कुछ आउटपुट मिलेंगे।

संबंधित मुद्दे