पॉइंटर क्या है?
पॉइंटर एक चर है जो दूसरे चर का मेमोरी पता संग्रहीत करता है। यह सीधे मेमोरी एक्सेस सक्षम करता है।
पॉइंटर्स की विशेषताएं
- मेमोरी बचत: बड़े डेटा की कॉपी के बजाय पता पास करें
- तेज निष्पादन: सीधा मेमोरी एक्सेस
- डायनामिक मेमोरी:
malloc/freeके लिए आवश्यक - डेटा संरचनाएं: लिंक्ड लिस्ट, ट्री, ग्राफ के लिए मूलभूत
बुनियादी सिंटैक्स
int a = 10; // सामान्य चर
int *p = &a; // पॉइन्टर घोषणा + प्रारंभिकरण
printf("%d", *p); // डीरेफरेंस: 10 प्रिंट होगा
स्ट्रिंग/सरणी के साथ पॉइंटर अंकगणित
char str[] = "Hello";
char *p = str; // str[0] का पता
printf("%c", *p); // 'H'
printf("%c", *(p+1)); // 'e'
p++; // अगले वर्ण पर
उदाहरण 1: पॉइंटर अंकगणित प्रदर्शन
#include <stdio.h>
int main() {
char array[] = "Tutorial"; // 8 वर्ण + \0
char *ptr, *ptr1;
int i;
ptr = &array[1]; // 'u' का पता
ptr1 = ptr + 3; // 'u' से 3 आगे → 'r' का पता
*ptr1 = 'e'; // 'r' को 'e' में बदलें (ASCII 101)
// ptr से 4 वर्ण प्रिंट करें
for (i = 0; i < 4; i++)
printf("%c", *ptr++); // u, t, o, e
printf("\nसंशोधित सरणी: %s\n", array); // Tutoeial
return 0;
}
आउटपुट
utoe संशोधित सरणी: Tutoeial
उदाहरण 2: और पॉइंटर अंकगणित
#include <stdio.h>
int main() {
char string[] = "CprogRamming";
char *p, *p1;
int i;
p = &string[5]; // 'R' का पता (0-आधारित: C p r o g R...)
p1 = p + 3; // 'R' से 3 आगे → 'm' का पता
*p1 = 'e'; // 'm' को 'e' में बदलें
for (i = 0; i < 4; i++)
printf("%c", *p++); // R, a, e, e
printf("\nसंशोधित: %s\n", string); // CprogRaeeing
return 0;
}
आउटपुट
Raee संशोधित: CprogRaeeing
पॉइंटर अंकगणित नियम
| ऑपरेशन | अर्थ | उदाहरण |
|---|---|---|
ptr + n | n तत्व आगे (प्रकार के आकार से गुणा) | int* + 2 = 8 बाइट्स आगे |
ptr - n | n तत्व पीछे | |
ptr++ | अगले तत्व पर | |
ptr2 - ptr1 | तत्वों में अंतर (ptrdiff_t) | सरणी में दूरी |
*ptr | मान एक्सेस (डीरेफरेंस) |
सावधानियाँ
- सरणी सीमा के बाहर पॉइंटर न ले जाएं (UB)
free()के बाद पॉइंटर उपयोग न करें (डैंगलिंग पॉइंटर)- अनारंभिकृत पॉइंटर डीरेफरेंस न करें
const char *p- पॉइंटर के माध्यम से संशोधन रोकता है
व्यावहारिक उपयोग: स्ट्रिंग लंबाई
size_t strlen_ptr(const char *s) {
const char *p = s;
while (*p) p++;
return p - s; // पॉइंटर अंतर = लंबाई
}