इस ट्यूटोरियल में, आप पॉइंटर्स के बारे में जानेंगे; क्या संकेत हैं, आप उनका उपयोग कैसे करते हैं और आम गलतियों का सामना कर सकते हैं जब आप उदाहरणों की मदद से उनके साथ काम करते हैं।
पॉइंटर्स C और C ++ प्रोग्रामिंग की शक्तिशाली विशेषताएं हैं। इससे पहले कि हम संकेत सीखें, आइए C प्रोग्रामिंग में पतों के बारे में जानें।
सी में पता
यदि आपके पास अपने कार्यक्रम में एक चर संस्करण है, &var
तो आपको स्मृति में इसका पता दिया जाएगा।
हमने scanf()
फ़ंक्शन का उपयोग करते समय कई बार पते का उपयोग किया है।
scanf("%d", &var);
यहां, उपयोगकर्ता द्वारा दर्ज किया गया मान, चर चर के पते में संग्रहीत किया जाता है। चलिए एक काम का उदाहरण लेते हैं।
#include int main() ( int var = 5; printf("var: %d", var); // Notice the use of & before var printf("address of var: %p", &var); return 0; )
आउटपुट
var: 5 पता का संस्करण: 2686778
नोट: उपरोक्त कोड चलाने पर आपको संभवतः एक अलग पता मिल जाएगा।
C पॉइंटर्स
पॉइंटर्स (पॉइंटर वैरिएबल) विशेष चर होते हैं जिनका उपयोग मूल्यों के बजाय पते को संग्रहीत करने के लिए किया जाता है।
सूचक वाक्य रचना
यहां बताया गया है कि हम संकेत कैसे दे सकते हैं।
int* p;
यहां, हमने पॉइंटर पी का int
प्रकार घोषित किया है ।
आप इन तरीकों से पॉइंटर्स भी घोषित कर सकते हैं।
int *p1; int * p2;
आइए पॉइंटर्स घोषित करने का एक और उदाहरण लेते हैं।
int* p1, p2;
यहां, हमने एक पॉइंटर p1 और एक सामान्य चर P2 घोषित किया है।
पॉइंटर्स को पते निर्दिष्ट करना
एक उदाहरण लेते हैं।
int* pc, c; c = 5; pc = &c;
यहां, 5 को चर के लिए सौंपा गया है। और, c का पता पीसी पॉइंटर को सौंपा गया है।
पॉइंटर्स द्वारा प्राप्त किए गए थिंग पॉइंट का मान प्राप्त करें
पॉइंटर्स द्वारा बताई गई चीज़ का मूल्य प्राप्त करने के लिए, हम *
ऑपरेटर का उपयोग करते हैं । उदाहरण के लिए:
int* pc, c; c = 5; pc = &c; printf("%d", *pc); // Output: 5
यहाँ, का पता c
पीसी पॉइंटर को सौंपा गया है। उस पते में संग्रहीत मूल्य प्राप्त करने के लिए, हमने * पीसी का उपयोग किया।
नोट: उपरोक्त उदाहरण में, पीसी एक सूचक है, नहीं *pc
। आप ऐसा कुछ नहीं कर सकते और नहीं करना चाहिए *pc = &c
;
वैसे, *
अनुमेय ऑपरेटर कहा जाता है (जब संकेत के साथ काम करना)। यह एक पॉइंटर पर संचालित होता है और उस पॉइंटर में संग्रहीत मूल्य देता है।
पॉइंटर्स द्वारा परिवर्तित मूल्य
एक उदाहरण लेते हैं।
int* pc, c; c = 5; pc = &c; c = 1; printf("%d", c); // Output: 1 printf("%d", *pc); // Ouptut: 1
हमने पीसी पॉइंटर को सी का पता सौंपा है।
फिर, हमने ग के मान को 1. में बदल दिया क्योंकि पीसी और सी का पता एक ही है, *pc
हमें 1 देता है।
एक और उदाहरण लेते हैं।
int* pc, c; c = 5; pc = &c; *pc = 1; printf("%d", *pc); // Ouptut: 1 printf("%d", c); // Output: 1
हमने पीसी पॉइंटर को सी का पता सौंपा है।
फिर, हमने *pc
1 का उपयोग करके बदल दिया *pc = 1;
। चूँकि पीसी और c का पता समान है, c 1 के बराबर होगा।
एक और उदाहरण लेते हैं।
int* pc, c, d; c = 5; d = -15; pc = &c; printf("%d", *pc); // Output: 5 pc = &d; printf("%d", *pc); // Ouptut: -15
प्रारंभ में, सी का पता का उपयोग करके पीसी पॉइंटर को सौंपा गया है pc = &c;
। चूँकि c 5 है, *pc
हमें 5 देता है।
फिर, d का पता उपयोग कर पीसी पॉइंटर को सौंपा गया है pc = &d;
। चूंकि d -15 है, *pc
हमें -15 देता है।
उदाहरण: पॉइंटर्स का कार्य करना
चलिए एक काम का उदाहरण लेते हैं।
#include int main() ( int* pc, c; c = 22; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 22 pc = &c; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 22 c = 11; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 11 *pc = 2; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 2 return 0; )
आउटपुट
C का पता: २६ of६ of Value४ मूल्य का c: २२ पता पॉइंटर पीसी का
कार्यक्रम की व्याख्या
int* pc, c;
Here, a pointer pc and a normal variable c, both of typeint
, is created.
Since pc and c are not initialized at initially, pointer pc points to either no address or a random address. And, variable c has an address but contains random garbage value.c = 22;
This assigns 22 to the variable c. That is, 22 is stored in the memory location of variable c.pc = &c;
This assigns the address of variable c to the pointer pc.c = 11;
This assigns 11 to variable c.*pc = 2;
This change the value at the memory location pointed by the pointer pc to 2.
Common mistakes when working with pointers
Suppose, you want pointer pc to point to the address of c. Then,
int c, *pc; // pc is address but c is not pc = c; // Error // &c is address but *pc is not *pc = &c; // Error // both &c and pc are addresses pc = &c; // both c and *pc values *pc = c;
Here's an example of pointer syntax beginners often find confusing.
#include int main() ( int c = 5; int *p = &c; printf("%d", *p); // 5 return 0; )
Why didn't we get an error when using int *p = &c;
?
It's because
int *p = &c;
is equivalent to
int *p: p = &c;
दोनों मामलों में, हम एक पॉइंटर p
(नहीं *p
) बना रहे हैं और &c
इसे असाइन कर रहे हैं।
इस भ्रम से बचने के लिए, हम इस तरह से कथन का उपयोग कर सकते हैं:
int* p = &c;
अब आप जानते हैं कि पॉइंटर्स क्या हैं, आप सीखेंगे कि अगले ट्यूटोरियल में पॉइंटर्स एरेज़ से कैसे संबंधित हैं।