इस tutorial में हम सीखेंगे की कैसे आप C programming में arrays और pointers को एक साथ use कर सकते हो और कैसे आप pointers की help से array elements को access कर सकते हो.
इस tutorial को समझने के लिए आपको पहले C arrays और C pointers की जानकारी होना जरूरी है इसलिए अगर आपने हमारे इन दोनों topics के tutorial नहीं पढ़ें तो नीचे links पर click करके पहले उन्हें जरूर पढ़ लें.
Read: Array in C Programming in Hindi
Read: Pointers in C Programming in Hindi
Read: Pointers Arithmetic in C Programming in Hindi
How are C Arrays Represented in Memory?
जब हम array declared करते हैं तब compiler हमारे लिए array के size के हिसाब से contiguous memory allocate कर देता है.
आप जिस data type का array declare करेंगे आपके array का हर एक elements memory में array के data type के size के हिसाब से memory में space occupied करेगा.
जैसे नीचे image में मैंने int data type का 5 size का array declared किया है और मेरे computer में int data type 4 bytes space occupied करता है.
इसलिए आप नीचे image में देख सकते हो की array के हर एक elements के addresses में 4 bytes का अंतर है.
Access Array Elements using Pointers in C
Array elements को memory में किस तरह से space और addresses allocate होते हैं ये तो हमने ऊपर समझ लिया है.
Array elements को एक-एक करके access करने के लिए आपको सबसे पहले array के first element का address pointer variable को assign करना होता है.
उसके बाद उस pointer variable के साथ addition या increment operations करके हम array के सभी elements को access कर सकते हैं.
Array elements का address store करने के लिए हम उसी data type का pointer variable declare करते हैं जिस data type का array होता है.
उसके बाद हम array के first element का address उस pointer को assign कर देते हैं. Array के first element का address assign करने के दो तरीके हैं.
int *ptr; int arr[5]; ptr = &arr[0]; //or ptr = arr;
जैसे हम variable के आगे ampersand ( & ) लगाकर उसका address pointer को assign कर देते हैं ठीक ऐसे ही आप array के 0th index के आगे ampersand लगाकर उसका address pointer को assign कर सकते हो.
Array के 0th index का address pointer को assign करने का दूसरा तरीका ये है की आप सिर्फ array का जो name है उनका उपयोग करें.
जैसे ऊपर हमारे example में &arr[0] और arr का use करके हमने array के 0th index का address pointer को assign किया है.
Array के 0th index का address pointer में assign करने बाद उस pointer के साथ addition या increment operations करके हम array के सभी elements को access कर सकते हैं.
Print Array Elements and Addresses using Pointers in C
#include<stdio.h>
int main()
{
int arr[]={34,54,65,37,21};
int i,*ptr;
ptr=&arr[0];
printf("Array Elements and Addresses :\n");
for(i=0;i<5;i++)
{
printf("Element : %d, Address : %d\n",*ptr,ptr);
ptr++;
}
return 0;
}
Output:
Array Elements and Addresses : Element : 34, Address : 6356708 Element : 54, Address : 6356712 Element : 65, Address : 6356716 Element : 37, Address : 6356720 Element : 21, Address : 6356724
Explanation:
ऊपर program में line 8 पर 0th index का address pointer ptr में assign करके बाद हमने for loop में printf() function के अंदर pointer ptr के साथ dereference operator ( * ) का use करके उस address पर मौजूद value को print कराया है और ptr की से उस address को.
printf() function के बाद हमने pointer ptr को increment (ptr++) किया है जिसका internally मतलब हुआ है ptr = ptr + (1 * size_of(int)) और इससे ये होगा की pointer ptr को array के next index का address मिल जाएगा.
उसके बाद loop फिर से repeat होगा और ये repeatation 5 times होता रहेगा.
Input Array Elements using Pointers in C
सभी pointers tutorials में हमने pointers की help से अलग-अलग data types का addresse और values को print किया है लेकिन क्या आप जानते हो की आप pointers की help से किसी भी data type में input भी ले सकते हो.
मैं आपको पहले pointer की help से int variable में input लेकर दिखाऊंगा और फिर pointer से ही array में input लेंगे.
Input in Variable using Pointer:
#include<stdio.h>
int main()
{
int a,*ptr;
ptr=&a;
printf("Address of a : %d\n",&a);
printf("Value of ptr : %d\n",ptr);
//Input using variable a
printf("Enter value of A : ");
scanf("%d",&a);
printf("Value of A : %d\n",a);
//Input using pointer ptr
printf("Enter value of A : ");
scanf("%d",ptr);
printf("Value of A : %d",a);
return 0;
}
Output:
Address of a : 6356728 Value of ptr : 6356728 Enter value of A : 14 Value of A : 14 Enter value of A : 43 Value of A : 43
Explanation:
जब आप किसी variable में input लेते हैं तब आप scanf() function में उस variable के आगे ampersand ( & ) का use करते हैं जो उस variable का address return करता है.
यानी की आप scanf() function में ये बताते हैं की आप किस address पर input लेना चाहते हो अगर आप scanf() function में किसी pointer variable को लिख दें जिसका पास भी किसी variable का address होता है तो बात तो एक ही हुई.
इसलिए ऊपर program में line 13 और 18 पर scanf() function से जब input लिया है तब दोनों में आप same address पर ही input ले रहे हो क्योंकि pointer ptr के पास variable a का ही address है.
Input in Array using Pointer:
#include<stdio.h>
int main()
{
int i,*ptr,arr[5];
ptr = arr;
for(i=1;i<=5;i++)
{
printf("Enter Element : ");
scanf("%d",ptr);
ptr++;
}
printf("Array Elements : ");
for(i=0;i<5;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
Output:
Enter Element : 34 Enter Element : 53 Enter Element : 27 Enter Element : 75 Enter Element : 28 Array Elements : 34 53 27 75 28