गो फ़ंक्शंस में पॉइंटर असाइनमेंट: अलग-अलग परिणाम क्यों?
गो में किसी फ़ंक्शन के लिए पॉइंटर पास करते समय, यह समझना महत्वपूर्ण है कि कैसे सूचक का उपयोग किया जाता है और इसका मूल मूल्य पर क्या प्रभाव पड़ता है। यह चर्चा एक कोड स्निपेट के इर्द-गिर्द घूमती है जो एक पॉइंटर को एक स्ट्रक्चर टेस्ट में पास करता है, जिसका उद्देश्य इसके वैल्यू फ़ील्ड को संशोधित करना है।
पहला कोड स्निपेट, पॉइंटर को एक नया टेस्ट स्ट्रक्चर असाइन करके वैल्यू फ़ील्ड को बदलने का प्रयास करने के बावजूद (*p = परीक्षण{4}), वास्तविक मूल्य को बदलने में विफल रहता है। ऐसा इसलिए है क्योंकि यह केवल पॉइंटर वेरिएबल पी को पुन: असाइन करता है, न कि इंगित मान को। f() फ़ंक्शन के भीतर p वेरिएबल स्वतंत्र रूप से मौजूद है और main() में p वेरिएबल द्वारा इंगित मान पर कोई प्रभाव नहीं पड़ता है।
इसके विपरीत, दूसरा कोड स्निपेट, जहां p.Value स्पष्ट रूप से 4 पर सेट है, मान फ़ील्ड को सफलतापूर्वक संशोधित करता है। ऐसा इसलिए है क्योंकि ऑपरेटर पॉइंटर को डीरेफ़रेंस करता है, जिससे वास्तविक इंगित मूल्य तक पहुंच और संशोधन की अनुमति मिलती है।
एक अतिरिक्त नोट के रूप में, मुख्य() फ़ंक्शन के पॉइंटर वेरिएबल में संग्रहीत पते को पास करके संशोधित करना संभव है इसका पता (*) f() फ़ंक्शन पर। हालाँकि, यह दृष्टिकोण p.Value.
का उपयोग करके इंगित मूल्य को सीधे संशोधित करने की तुलना में कम कुशल और सुविधाजनक है।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3