पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल के एड्रेस को स्टोर करता है।
सुविधाएं
पॉइंटर की विशेषताओं को नीचे समझाया गया है -
- सूचक स्मृति स्थान बचाता है।
- मेमोरी लोकेशन तक सीधी पहुंच के कारण पॉइंटर का निष्पादन समय तेज होता है।
- पॉइंटर्स की मदद से, मेमोरी को कुशलता से एक्सेस किया जाता है, यानी मेमोरी को गतिशील रूप से आवंटित और डील किया जाता है।
- पॉइंटर्स का उपयोग डेटा संरचनाओं के साथ किया जाता है।
सूचक घोषणा, आरंभीकरण और पहुंच
निम्नलिखित कथन पर विचार करें -
int qty = 179;
मेमोरी में, वेरिएबल को इस प्रकार दर्शाया जा सकता है -
सूचक घोषित करना
इसका अर्थ है कि 'p' एक सूचक चर है जो एक अन्य पूर्णांक चर का पता रखता है, जैसा कि नीचे दिए गए कथन में बताया गया है -
Int *p;
सूचक का प्रारंभ
एड्रेस ऑपरेटर (&) का उपयोग पॉइंटर वेरिएबल को इनिशियलाइज़ करने के लिए किया जाता है।
उदाहरण के लिए -
int qty = 175; int *p; p= &qty;
किसी वेरिएबल को उसके पॉइंटर से एक्सेस करना
एक चर के मूल्य तक पहुँचने के लिए, अप्रत्यक्ष ऑपरेटर (*) का उपयोग किया जाता है।
उदाहरण के लिए -
यहां, '*' को पते पर मान के रूप में माना जा सकता है।
दो कथन निम्नलिखित कथन के समतुल्य हैं -
p = &qty; n = *p; n =qty
पॉइंटर्स और एक-आयामी सरणियाँ
- कंपाइलर सरणी के सभी तत्वों के लिए सतत स्मृति स्थान आवंटित करता है।
- आधार पता =सरणी का पहला तत्व पता (सूचकांक 0)।
- उदाहरण के लिए - int a [5] ={10, 20,30,40,50};
तत्व
पांच तत्वों को इस प्रकार संग्रहीत किया जाता है -
-
यदि 'p' को पूर्णांक सूचक के रूप में घोषित किया जाता है, तो, एक सरणी 'a' को निम्नलिखित असाइनमेंट द्वारा इंगित किया जा सकता है -
p = a; (or) p = &a[0];
-
एक तत्व से दूसरे तत्व में जाने के लिए p++ का उपयोग करके 'a' के प्रत्येक मान तक पहुँचा जाता है। जब एक सूचक को बढ़ाया जाता है, तो इसका मान उस डेटाटाइप के आकार से बढ़ जाता है जिसे वह इंगित करता है। इस लंबाई को "स्केल फ़ैक्टर" कहा जाता है।
-
'p' और 'a' के बीच संबंध को नीचे समझाया गया है -
P = &a[0] = 1000 P+1 = &a[1] = 1004 P+2 = &a[2] = 1008 P+3 = &a[3] = 1012 P+4 = &a[4] = 1016
-
किसी तत्व के पते की गणना उसके सूचकांक और डेटाटाइप के स्केल फैक्टर का उपयोग करके की जाती है। इसे समझाने के लिए एक उदाहरण यहां दिया गया है।
Address of a[3] = base address + (3* scale factor of int) = 1000 + (3*4) = 1000 +12 = 1012
-
सरणी अनुक्रमण का उपयोग करने के बजाय सरणी तत्वों तक पहुँचने के लिए पॉइंटर्स का उपयोग किया जा सकता है।
-
*(p+3) a[3] का मान देता है।
a[i] = *(p+i)
उदाहरण कार्यक्रम
पॉइंटर्स और एक-आयामी सरणियों के लिए सी प्रोग्राम निम्नलिखित है -
#include<stdio.h> main ( ){ int a[5]; int *p,i; printf ("Enter 5 lements"); for (i=0; i<5; i++) scanf ("%d", &a[i]); p = &a[0]; printf ("Elements of the array are"); for (i=0; i<5; i++) printf("%d", *(p+i)); }
आउटपुट
जब उपरोक्त प्रोग्राम को निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
Enter 5 elements : 10 20 30 40 50 Elements of the array are : 10 20 30 40 50