मेरे पास एक फ़ंक्शन है
void printMe (शून्य * i) {printf (" % D ", i); }
जहां मैं शून्य पॉइंटर को पास करना चाहता हूं और उसे स्क्रीन पर प्रिंट करना चाहता हूं। उपरोक्त उदाहरण ठीक है अगर मैं पूर्णांक, फ्लोट या डबल है, लेकिन क्रैश होता है अगर मैं एक चार है सी में कोई ओवरलोडिंग नहीं है जैसे मैं आमतौर पर सी ++ में उपयोग करता हूं तो सवाल यह है, क्या हम सी में एक फ़ंक्शन बना सकते हैं जो उस तत्व को प्रिंट करेगा जो कि यह पैरामीटर है, और यदि हां यह कैसे संभव है, क्योंकि यह इस पल में पूरी तरह से मुझे छुटकारा दिलाता है।
Q1: तो सवाल यह है, क्या हम सी में एक फ़ंक्शन बना सकते हैं जो तत्व का प्रिंट होगा < / P>
ए: जिस तरह से आप चाहते हैं उसमें नहीं। आपको फ़ंक्शन में जानकारी देना होगा, यह बताएगा कि आप किस तरह के डेटा से गुज़र रहे हैं।
Q2: और यदि हां, यह कैसे संभव है क्योंकि यह इस क्षण में पूरी तरह से मुझे छुआ नहीं है। / Em>
ए: यह आपको लुभाना है क्योंकि यह नहीं किया जा सकता है। शून्य के साथ कोई मेटाडाटा संबद्ध नहीं है * कि कंपाइलर या रनटाइम का उपयोग यह पता लगाने के लिए हो सकता है कि वे इसे इंगित करते हैं। आपको या तो
- एक संरचना को पारित करने की आवश्यकता है जिसमें एक पॉईन्टर और सूचना के बारे में जानकारी है- पॉइंटर को इंगित करता है (उदाहरण के लिए एक एन्यूम)।
- पास पॉइंटर के बारे में जानकारी के साथ अतिरिक्त पैरामीटर
जैसा कि कोड में है, केवल एक चीज जो आप यहां मुद्रित कर सकते हैं वह पता है जो मैं इंगित करता हूं।
एक शून्य सूचक कच्चे आंकड़ों के मुताबिक, प्रिंटफ़ आपको बताता है कि आप किस प्रकार का डेटा टाइप कर रहे हैं, इसकी कोई बुद्धिमत्ता नहीं है और यह आपके लिए "इसे समझ नहीं" कर सकता है।
यह आसान है।
क्या आप कार्य करने के लिए पास प्रकार की जानकारी कर सकते हैं, लेकिन फिर आप printf की तरह ही कुछ के साथ समाप्त होते हैं, जहां आप निम्नलिखित विवादों में डेटा के बारे में प्रकार की जानकारी युक्त एक स्वरूपण स्ट्रिंग पास करते हैं।
यह आशा है कि मदद करता है।
इसके अलावा। । । " सी में कोई ओवरलोडिंग नहीं है जैसे कि मैं आम तौर पर सी ++ में उपयोग करता हूं " c ++ में भी संकलन के समय में अधिभार होता है, और यहां संकलक के लिए कोई भी तरीका नहीं है, यह जानने के लिए कि कौन सा डेटा उस समारोह को पारित किया जाएगा, भले ही आप ओवरलोड करने के लिए उपयोग किए गए हों, यह कभी भी इस तरह काम नहीं करेगा (जैसे कि printf का उपयोग करते हुए इस एक ही चीज़ की कोशिश करें, लेकिन इसे C ++ कंपाइलर के साथ संकलित करें, आप बिल्कुल समान परिणाम प्राप्त करेंगे)। वास्तव में कोशिश करें
cout & lt; & lt; मैं;
ऊपर दिए गए फ़ंक्शन में, और यह आपको पता देगा जो मैं इंगित करता हूं, न कि "मान" का।
cout & lt;
इसलिए, उपरोक्त काम को सी ++ में प्राप्त करने के लिए आपको बहुत अधिक ओवरलोड किए गए फ़ंक्शंस (या एक टेम्पलेट फ़ंक्शन, जो वास्तव में एक ही बात है, को छोड़कर, कम्पाइलर के लिए कार्य करता है आप) उदा अतिभारित कार्य
printMe (int i) {...} printMe (डबल डी) {...} printMe (char c) {...} printMe (चार * स्ट्रिंग) {। ..}
सी में आपको उन कार्यों को विशिष्ट नाम देना होगा
printInt (int i) {...} printDouble (डबल डी) {...} printChar (char c) {...} printString (char * string) {...}
Comments
Post a Comment