पॉइंटर्स और ऐरे
कंपाइलर ऐरे के सभी एलिमेंट्स के लिए सन्निहित मेमोरी लोकेशन्स आवंटित करता है। बेस एड्रेस पहले एलिमेंट का पता होता है।
उदाहरण
int a[5] = {10, 20, 30, 40, 50};
मेमोरी लेआउट (मान लें बेस एड्रेस 1000, int = 4 बाइट्स):
| एलिमेंट | वैल्यू | एड्रेस |
|---|---|---|
| a[0] | 10 | 1000 |
| a[1] | 20 | 1004 |
| a[2] | 30 | 1008 |
| a[3] | 40 | 1012 |
| a[4] | 50 | 1016 |
पॉइंटर से ऐरे एक्सेस
int *p;
p = a; // या p = &a[0];
पॉइंटर अंकगणित: p+1 अगले इंटीजर (4 बाइट्स आगे) को पॉइंट करता है।
पॉइंटर और ऐरे इंडेक्स संबंध
p = &a[0] = 1000
p + 1 = &a[1] = 1004
p + 2 = &a[2] = 1008
p + 3 = &a[3] = 1012
p + 4 = &a[4] = 1016
*(p + i) == a[i]
एड्रेस कैलकुलेशन फॉर्मूला
Address of a[i] = Base Address + (i * sizeof(datatype))
उदाहरण: a[3] का एड्रेस = 1000 + (3 * 4) = 1012
प्रोग्राम: पॉइंटर से ऐरे ट्रैवर्सल
#include <stdio.h>
int main() {
int a[5];
int *p, i;
printf("Enter 5 elements: ");
for (i = 0; i < 5; i++)
scanf("%d", &a[i]);
p = &a[0];
printf("Array elements: ");
for (i = 0; i < 5; i++)
printf("%d ", *(p + i));
return 0;
}
आउटपुट
Enter 5 elements: 10 20 30 40 50 Array elements: 10 20 30 40 50
मुख्य बिंदु
- ऐरे नाम (
a) अधिकांश संदर्भों में पहले एलिमेंट के एड्रेस में डिके होता है। a[i]को कंपाइलर*(a + i)में अनुवाद करता है।- पॉइंटर अंकगणित स्वचालित रूप से डेटा टाइप के आकार के अनुसार स्केल होता है।