समस्या
उदाहरणों के साथ C प्रोग्रामिंग भाषा में रेफरेंस और पॉइंटर की अवधारणा समझाएं।
रेफरेंस (Reference) - C++ अवधारणा, C में नहीं
लेख में "रेफरेंस" के रूप में वर्णित वास्तव में मान द्वारा पास करना (Pass by Value) है।
पॉइंटर (Pointer)
- किसी चर का पता (address) संग्रहीत करता है
- NULL मान धारण कर सकता है
- संदर्भ द्वारा पास करना (Pass by Reference) सक्षम करता है
- घोषणा के समय प्रारंभिकरण अनिवार्य नहीं
सिंटैक्स
डेटा_प्रकार *पॉइंटर_नाम;
उदाहरण: int *ptr; // ptr एक पूर्णांक का पता धारण करता है
पता असाइन करना
पॉइंटर_चर = &दूसरा_चर;
उदाहरण प्रोग्राम
#include <stdio.h>
int main() {
int a = 2, b = 4;
int *p;
printf("a का पता = %p\n", (void*)&a);
printf("b का पता = %p\n", (void*)&b);
p = &a; // p, a की ओर इंगित करता है
printf("a का मान = %d\n", a);
printf("*p का मान = %d\n", *p); // a का मान प्रिंट करता है
printf("p का मान (पता) = %p\n", (void*)p);
p = &b; // p अब b की ओर इंगित करता है
printf("b का मान = %d\n", b);
printf("*p का मान = %d\n", *p); // b का मान प्रिंट करता है
printf("p का मान (पता) = %p\n", (void*)p);
return 0;
}
आउटपुट
a का पता = 0x7ffc1234567c
b का पता = 0x7ffc12345678
a का मान = 2
*p का मान = 2
p का मान (पता) = 0x7ffc1234567c
b का मान = 4
*p का मान = 4
p का मान (पता) = 0x7ffc12345678
पास बाय वैल्यू vs पास बाय रेफरेंस (पॉइंटर के माध्यम से)
पास बाय वैल्यू (मान द्वारा)
void swapByValue(int a, int b) {
int temp = a;
a = b;
b = temp;
// मूल चर अपरिवर्तित रहते हैं
}
पास बाय रेफरेंस (पॉइंटर द्वारा - C में अनुकरण)
void swapByReference(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
// मूल चर बदल जाते हैं
}
int main() {
int x = 10, y = 20;
swapByReference(&x, &y); // पते पास करें
// अब x=20, y=10
}
तुलना तालिका
| विशेषता | पास बाय वैल्यू | पास बाय रेफरेंस (पॉइंटर) |
|---|---|---|
| क्या पास होता है | मान की प्रति | पता |
| मूल चर प्रभावित | नहीं | हां |
| मेमोरी उपयोग | अधिक (कॉपी) | कम |
| NULL संभव | नहीं | हां |
| सिंटैक्स | सरल | & और * आवश्यक |
पॉइंटर के सामान्य उपयोग
- डायनामिक मेमोरी आवंटन (
malloc,free) - सरणी/स्ट्रिंग मैनिपुलेशन
- फ़ंक्शन से एकाधिक मान वापस करना
- डेटा संरचनाएं (लिंक्ड लिस्ट, ट्री, ग्राफ)
- हार्डवेयर एड्रेस एक्सेस (एम्बेडेड सिस्टम)