पॉइंटर्स के बारे में सोचते समय, आपको कुछ अवशोषणों पर स्पष्ट होना चाहिए।
स्मृति में एक वस्तु। यह किसी भी प्रकार (और आकार) का हो सकता है। एक पूर्णांक वस्तु, उदाहरण के लिए, स्मृति में 4 बाइट्स (32 बिट मशीनों पर) पर कब्जा कर लेगी। एक सूचक वस्तु स्मृति में 4 बाइट्स (32 बिट मशीनों पर) पर कब्जा कर लेगी। जैसा कि स्पष्ट होना चाहिए, पूर्णांक वस्तु पूर्णांक मान रखती है; एक सूचक वस्तु अन्य वस्तुओं के पते रखती है।
सी प्रोग्रामिंग भाषा प्रतीकों (चर) को स्मृति में इन वस्तुओं का प्रतिनिधित्व करने देती है। जब आप घोषित करते हैं,
int i;
प्रतीक (चर) मैं स्मृति में कुछ पूर्णांक वस्तु का प्रतिनिधित्व करता हूं। अधिक विशेष रूप से, यह इस वस्तु के मूल्य का प्रतिनिधित्व करता है। आप प्रोग्राम में उपयोग करके इस मूल्य का उपयोग कर सकते हैं।
& मैं आपको स्मृति में इस वस्तु का पता दूंगा।
एक पॉइंटर ऑब्जेक्ट किसी अन्य ऑब्जेक्ट का पता रख सकता है। आप सिंटैक्स का उपयोग करके एक पॉइंटर ऑब्जेक्ट घोषित करते हैं,
int * ptr;
अन्य चरों की तरह, पॉइंटर चर एक ऑब्जेक्ट के मूल्य का प्रतिनिधित्व करता है, एक पॉइंटर ऑब्जेक्ट। यह मान बस किसी अन्य वस्तु का पता होता है। आपने पॉइंटर ऑब्जेक्ट का मान सेट किया है,
ptr = & i;
अब, जब आप प्रोग्राम में पीआरआर कहते हैं, तो आप इसके मूल्य का जिक्र कर रहे हैं, जो कि मेरा पता है। लेकिन यदि आप * पीआरटी कहते हैं, तो आप पीआरटी के मूल्य का जिक्र नहीं कर रहे हैं, बल्कि उस वस्तु का मूल्य जिसका पता पीआरटी में है i.e. i।
आपके स्वैप फ़ंक्शन के साथ समस्या यह है कि आप पॉइंटर्स के मानों को स्वैप कर रहे हैं, न कि ऑब्जेक्ट्स के मान जिन्हें इन पॉइंटर्स के लिए पते हैं। वस्तुओं के मूल्यों को प्राप्त करने के लिए, आपको * पीआरटी का उपयोग करना होगा। (अस्थायी)
स्पष्ट प्रश्न यह होगा कि इस कार्यान्वयन और आपके कार्यान्वयन के बीच क्या अंतर है? (मुझे पता है कि इस के साथ समस्या क्या है, मैं बस इसे खोजने में आपकी सहायता करने की कोशिश कर रहा हूं।) [बेशक, एसओ पर सभी उत्सुक बीवर सभी सीधे जवाब पर कूदने के लिए तैयार हैं।] –
एक ठोस क्रैश सबक मूल्य से गुजरने पर। धन्यवाद पीपीएल। –