पॉइंटर बनाम ऐरे
एक पॉइंटर एक डेटा प्रकार है जो एक मेमोरी लोकेशन का संदर्भ रखता है (यानी एक पॉइंटर वेरिएबल एक मेमोरी लोकेशन का एड्रेस स्टोर करता है जिसमें कुछ डेटा स्टोर होता है)। तत्वों के संग्रह को संग्रहीत करने के लिए Arrays सबसे अधिक उपयोग की जाने वाली डेटा संरचना है। अधिकांश प्रोग्रामिंग भाषाएं सरणियों को आसानी से घोषित करने और सरणियों में तत्वों तक पहुंचने के तरीके प्रदान करती हैं।
एक सूचक क्या है?
एक पॉइंटर एक डेटा प्रकार है जो एक मेमोरी लोकेशन का पता संग्रहीत करता है जिसमें कुछ डेटा संग्रहीत होता है। दूसरे शब्दों में, एक पॉइंटर मेमोरी लोकेशन का संदर्भ रखता है। मेमोरी लोकेशन में स्टोर किए गए डेटा को एक्सेस करना जो पॉइंटर द्वारा रेफर किया जाता है, डेरेफेरेंसिंग कहलाता है।पॉइंटर्स का उपयोग करने से ट्रैवर्सिंग ट्री/स्ट्रिंग्स, टेबल लुकअप इत्यादि जैसे दोहराव वाले संचालन करते समय प्रदर्शन में सुधार होगा। ऐसा इसलिए है क्योंकि पॉइंटर्स द्वारा बताए गए डेटा को वास्तव में कॉपी करने और एक्सेस करने की तुलना में पॉइंटर्स को डीरेफ़रेंस करना और कॉपी करना सस्ता है। एक नल पॉइंटर एक पॉइंटर होता है जो किसी भी चीज़ की ओर इशारा नहीं करता है। जावा में, एक नल पॉइंटर तक पहुँचने से एक अपवाद उत्पन्न होगा जिसे NullPointerException कहा जाता है।
ऐरे क्या है?
आकृति 1 में दिखाया गया कोड का एक टुकड़ा है जो आम तौर पर किसी सरणी को मान घोषित करने और असाइन करने के लिए उपयोग किया जाता है। चित्र 2 दर्शाता है कि स्मृति में एक सरणी कैसी दिखाई देगी।
इंट वैल्यू[5]; मान[0]=100; मान[1]=101; मान[2]=102; मान[3]=103; मान[4]=104; |
चित्र 1: किसी सरणी को मान घोषित करने और असाइन करने के लिए कोड
100 | 101 | 102 | 103 | 104 |
सूचकांक: 0 | 1 | 2 | 3 | 4 |
चित्र 2: स्मृति में संग्रहीत सरणी
उपरोक्त कोड एक सरणी को परिभाषित करता है जो 5 पूर्णांकों को संग्रहीत कर सकता है और उन्हें 0 से 4 सूचकांकों का उपयोग करके एक्सेस किया जाता है। एक सरणी की एक महत्वपूर्ण संपत्ति यह है कि, संपूर्ण सरणी को स्मृति के एकल ब्लॉक के रूप में आवंटित किया जाता है और प्रत्येक तत्व को इसकी सरणी में अपना स्थान। एक बार एक सरणी परिभाषित हो जाने के बाद, इसका आकार तय हो जाता है। इसलिए यदि आप संकलन समय पर सरणी के आकार के बारे में निश्चित नहीं हैं, तो आपको सुरक्षित पक्ष में रहने के लिए एक बड़ी पर्याप्त सरणी को परिभाषित करना होगा। लेकिन, ज्यादातर बार, हम वास्तव में आवंटित तत्वों की तुलना में कम संख्या में तत्वों का उपयोग करने जा रहे हैं। तो स्मृति की काफी मात्रा वास्तव में बर्बाद हो जाती है।दूसरी ओर यदि "काफी बड़ा सरणी" वास्तव में पर्याप्त बड़ा नहीं है, तो प्रोग्राम क्रैश हो जाएगा।
पॉइंटर्स और एरेज़ में क्या अंतर है?
एक पॉइंटर एक डेटा प्रकार है जो एक मेमोरी लोकेशन का पता संग्रहीत करता है जिसमें कुछ डेटा संग्रहीत किया जाता है, जबकि एरेज़ तत्वों के संग्रह को संग्रहीत करने के लिए सबसे अधिक उपयोग की जाने वाली डेटा संरचना है। सी प्रोग्रामिंग भाषा में, सूचक अंकगणित का उपयोग करके सरणी अनुक्रमण किया जाता है (यानी सरणी x का ith तत्व (x+i) के बराबर होगा)। इसलिए सी में, पॉइंटर्स का सेट जो लगातार स्मृति स्थानों के सेट को इंगित करता है, को एक सरणी के रूप में माना जा सकता है। इसके अलावा, इस बात में अंतर है कि sizeof ऑपरेटर पॉइंटर्स और सरणियों पर कैसे काम करता है। जब एक सरणी पर लागू किया जाता है, तो sizeof ऑपरेटर सरणी के पूरे आकार को वापस कर देगा, जबकि जब एक सूचक पर लागू किया जाता है, तो यह केवल सूचक का आकार लौटाएगा।