Basics of pointers in hindi
पॉइंटर्स C प्रोग्रामिंग में एक फंडामेंटल कांसेप्ट है. जो सी प्रोग्रामर को प्रोग्राम में डिक्लेअर डिफरेंट प्रोग्राम वेरिएबल के मेमोरी एड्रेस के साथ सीधे काम करने की अनुमति देती है। पॉइंटर आपको वेरिएबल डेटा को इनडायरेक्ट रूप से डाटा टाइप वेरिएबल के मेमोरी एड्रेस लोकेशन को एक्सेस करने और उसमें हेरफेर करने की सुविधा प्रदान करते हैं. जो की सी लैंग्वेज में डिस्प्ले वेरिएबल के डायनेमिक मेमोरी एलोकेशन, रेफ़्रेन्स द्वारा प्रोग्राम आर्गुमेंट को पॉइंटर से पास करने और एरे डाटा टाइप एड्रेस और स्ट्रिंग्स एलिमेंट के साथ कुशलतापूर्वक प्रोग्रामिंग ऑपरेशन को कर सकते है.

So let’s know the pointer in C programming.
What is a pointer in C?
C लैंग्वेज में पॉइंटर एक वैरिएबल मेमोरी एड्रेस लोकेशन चेकर या वेरिएबल मेमोरी एड्रेस होल्डर है. जो किसी अन्य प्रोग्राम में डिक्लेअर वैरिएबल का मेमोरी एड्रेस स्टोरेज लोकेशन में स्टोर करता है। पॉइंटर को सी लैंग्वेज में सीधे वेरिएबल वैल्यू रखने के बजाय, पॉइंटर उस वेरिएबल स्टोरेज एड्रेस को होल्ड करता है, जहाँ यूज़ वेरिएबल वैल्यू मेमोरी में स्टोर होता है।
Declaring pointers in C.
सी प्रोग्राम में पॉइंटर वेरिएबल को डिक्लेअर करने के लिए, आप * (एस्टरिस्क) स्टार स्पेशल करैक्टर ऑपरेटर का उपयोग करते हैं। यहाँ आप याद रखे की पॉइंटर का टाइप उस वैरिएबल के डाटा टाइप से मिलता जुलता होना चाहिए, जिस वेरिएबल का एड्रेस वह स्टोर करेगा।
int *ptr1; // declare pointer to integer data type
char *name_ptr; // pointer to declare as name character
float *salary;
यहाँ, ptr एक इन्टिजर पॉइंटर वेरिएबल है, और name_ptr एक करैक्टर के लिए करैक्टर पॉइंटर वेरिएबल है। salary एक फ्लोट एक फ्लोटिंग पॉइंटर वेरिएबल है.
Initializing Pointers in C.
सी प्रोग्राम में पॉइंटर्स को एड्रेस-ऑफ ऑपरेटर & ऐंपरसेंड ऑपरेटर का उपयोग करके स्पेशल प्रोग्राम वेरिएबल या मेमोरी लोकेशंस की ओर इंडीकेट कर स्टार्ट किया जा सकता है।
int decimal = 1;
int *ptr = &decimal; // यहाँ ptr अब &decimal के मेमोरी एड्रेस को इंडीकेट करता है
Accessing values through pointers in C.
सी लैंग्वेज में पॉइंटर जिस वेरिएबल मेमोरी एड्रेस की ओर इंडीकेट करता है, उस मेमोरी एड्रेस पर संग्रहीत प्रोग्राम वेरिएबल मेमोरी वैल्यू तक पहुँचने के लिए, आप डीरेफ़रेंस ऑपरेटर *(एस्टरिस्क) ऑपरेटर का उपयोग करते हैं।
int value1 = *ptr; // ptr जिस उस मेमोरी एड्रेस को इंडीकेट करता है, (जो decimal वेरिएबल है) पर संग्रहीत वेरिएबल वैल्यू को डिस्प्ले करता है
Pointer Arithmetic Operations in C.
सी प्रोग्राम में पॉइंटर्स डाटा टाइप को उनके डाटा प्रकार के अगले या पिछले मेमोरी एड्रेस की ओर इंडीकेट करने के लिए पॉइंटर वेरिएबल को इन्क्रीमेंट या डेक्रेमेंट ऑपरेटर द्वारा ऑपरेट किया जा सकता है।
int arrayvalue[6] = {5, 9, 4, 2, 1,3 };
int *ptr = arrayvalue; // set pointer to the first element of the array
printf(“\n %d”, *ptr); // Output – 5 (display array element value at first element)
ptr++; // ptr++ increment operator pointer move to the next element in array
printf(“\n %d”, *ptr); // Output – 9 (display array value at second element in list)
Void Pointer in C.
सी लैंग्वेज में वोइड पॉइंटर एक पॉइंटर टाइप होता है. जो सी प्रोग्राम में डिक्लेअर वेरिएबल के किसी मेमोरी एड्रेस को इंडीकेट नहीं करता है। वोइड पॉइंटर का उपयोग अक्सर यह इंडीकेट करने के लिए किया जाता है कि पॉइंटर वर्तमान में किसी भी वैलिड ऑब्जेक्ट की ओर इंडीकेट नहीं कर रहा है।
int *ptr = NULL; // declare ptr to a null pointer type
Pointer and Array in C.
C लैंग्वेज में ऐरे डाटा टाइप पॉइंटर से बहुत हद तक रिलेटेड होते हैं। जब आप सी में इंडेक्स के बिना ऐरे डाटा टाइप वेरिएबल नाम का उपयोग करते हैं. तो यह ऐरे के पहले डाटा एलिमेंट के लिए पॉइंटर एड्रेस की तरह करता है।
int arrayelement[5] = {9 , 8, 4, 2, 6 };
int *ptr = arrayelement; // ptr int variable points to the first element of the arrayelement
printf(“\n %d”, *ptr); // Output – 9 (display the first element in array)
ptr++; // ++ operator move to next array element in array series
printf(“\n %d”, *ptr); // Output – 8 (display the second array element)
Pointer and Function in C.
पॉइंटर्स ऑपरेटर का का उपयोग आमतौर पर सी फ़ंक्शन में कॉल बाय रेफ़्रेन्स के द्वारा प्रोग्राम वेरिएबल आर्गुमेंट को पास करने के लिए किया जाता है. जिससे फ़ंक्शन मूल फंक्शन वेरिएबल को मॉडिफाई कर सकता है।
void incvalue(int *ptr) {
(*ptr)++; // use ptr operator to Increment the value to the address ptr points to location
}
int main() {
int decimal = 1;
incvalue(&decimal); // it use to pass the address of decimal to the function
printf(“\n Increase the value with increment operator – %d”, decimal);
// Output – Incremented value – 2
return 0;
}
Dynamic Memory Allocation in C.
सी लैंग्वेज में पॉइंटर्स ऑपरेटर malloc(), calloc(), और realloc() जैसे बिल्ट इन फ़ंक्शन का उपयोग करके डायनेमिक मेमोरी एलोकेशन किया जाता हैं. जो प्रोग्राम रनटाइम पर वेरिएबल के लिए मेमोरी आवंटित करते हैं।
int *ptr = malloc(sizeof(int)); // malloc function used to allocate memory for an integer variable
*ptr = 2; // now assign a value to the allocated memory
// free function free the allocated memory when not needed in allocated variable
free(ptr);
Pointer to Pointer (Double Pointer) in C.
सी प्रोग्राम में पॉइंटर दूसरे पॉइंटर को इंडीकेट करता हैं. जिसे डबल पॉइंटर या पॉइंटर टू पॉइंटर ऑपरेशन कहा जाता है. जिससे अप्रत्यक्षता रूप से पॉइंटर की एक सीरीज बनती है।
int decimal = 1;
int *ptr = &decimal;
int **ptr_to_ptr = &ptr;
printf(“\n %d”, **ptr_to_ptr); // Output – 1 (display the value at the address stored in ptr variable)
Conclusion About Pointers.
C प्रोग्रामिंग में प्रोग्राम वेरिएबल एड्रेस में महारत हासिल करने के लिए आपको पॉइंटर को समझना जरूरी है. क्योंकि पॉइंटर हमें कुशल सी प्रोग्राम मेमोरी मैनेजमेंट, डेटा स्ट्रक्चर में हेरफेर और एडवांस्ड प्रोग्राम एल्गोरिदम के एक्सेक्यूशन को सक्षम करते हैं। पॉइंटर डाटा टाइप स्पेशल्ली किसी भी डाटा टाइप वेरिएबल मेमोरी एड्रेस को डील करने में उपयोग होते है.