पॉइंटर वेरिएबल क्या है , किसे कहते है Pointer initialization , Pointer variable Access in hindi in c language :-
इससे पहले के article मे हमने
pointer के advantage,declartion और address accessing statement को पढ़ा था |अब इस article मे हम pointer initialization ,access of address from pointer variable और pointer of pointer concept को पड़ेगे :
1. Pointer initialization
Pointer initialization मे ,किसी variable के address को pointer variable मे assign किया जाता है या किसी address को pointer variable मे assign करने की प्रोसेस को pointer initialization कहते है |
सभी uninitialized pointer कोई कोई value जरुर रखते है इस values को garbage address कहते है अतः इन address को कोई validity नहीं होती है |फिर भी कोम्प्लिएर कोई भी error डिटेक्ट नहीं करता है |और प्रोग्राम (जिसमे uninitialized pointer होते है ) error-nous आउटपुट देते है |
इसलिए सभी pointer को initialized करना जरूरी है |इसका syntax है :
pointer_name = & variable_name ;
यहा पर :
pointer_name : pointer_name pointer का नाम है जिसमे address store होगा |
& =ये address operator जो किसी variable के address को पता लगाने के लिए किया जाता है |
variable_name : variable_name का उस variable का नाम है जिसका address पता लगाना है |
उदहारण के लिए :
int variable_1;
int *p1;
p1=&variable_1;
इसमें variable_1 variable का नाम और p1 pointer variable का नाम है |
हम Pointer initialization को pointer declaration के साथ कर सकते है लेकिन variable के declaretion ,Pointer initialization से पहले होने चाहिए |जैसे
int variable_1;
int *p1=&variable_1;
Pointer का data type भी बहुत जरुरी होता है |variable का datatype और pointer का datatype same होना चाहिए|जैसे
float *a;
int c;
float b;
a=&c; // Wrong Pointer initialization //
a=&b;
a=&c; statement गलत है क्योकि जब float *a; execute होता है तब कोम्प्लिएर ये assume कर लेता है की ‘a’ एक pointer variable है जो की float variable के address को point करता है |
दो या दो से अधिक data variable और pointer variable को declare ओत initial एक statement मे कर सकते है |जैसे
int a , *b=&a;
इसमें एक statement मे ही a और b को declare किया गया है और b की value को initial भी कर सकते है |
किसी pointer variable को null से भी initial कर सकते है|जिसका statement है :-
int *a=NULL;
int *a=0;
Pointer बहुत flexible होता है अतः किसी एक variable मे दो या दो से अधिक variable के address को store कर सकते है |लेकिन pointer variable एक समय मे एक ही variable के address को store कर सकता है |
जैसे :
int a,b,c, *p;
p=&a;
p=&b;
p=&c;
इस उदाहरन मे p=&a; से variable ‘a’ का address pointer मे store होता है |फिर p=&b; statement से variable ‘a’ का address को हटाकर variable ‘b’ का address store होता है |और last statement से p=&c; ,variable ‘b’ का address हट जाता है और variable ‘c’ का address store हो जाता है |
किसी एक variable के address को multiple pointers को point कर सकता है |जैसे
int a;
int *p,*p1;
p=&a;
p1=&a;
2. Pointer variable Access
जब किसी pointer variable को कोई value assign कर देते है तब ये question आता है की उस pointer variable की value को किस तरह access करेगे |किसी pointer variable के value को access करने के लिए asterisk’*’ को use करते है |इसे indirection operator कहते है |कभी कभी dereferencing operator भी कहते है | इसका syntax है :-
variable_name = * pointer_name ;
यहा पर :
variable_name : variable_name वे variable का नाम होता है जिसमे pointer value को store होती है |
‘*’: ये indirection operator है |
pointer_name : ये उस pointer का नाम है जिसकी values को access करना है |
इसका उदाहराण है :-
int a, *b,c;
a=123;
b=&a;
c=*b;
इस उदहारण मे ,तीन variable a,b,c है जिसमे a और c तो नार्मल integer है और b एक integer pointer है |
a=123; statement से 123 variable ‘a’ मे assign होगा |
b=&a; statement से pointer का initialization होता है और इसमें variable ‘a’ का address store हो जाता है |
c=*b; statement से pointer ‘b’ की value c मे assign होती है |इसलिए c की value ‘123’ होगी |
उदाहरण के लिए:
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b;
int *c;
a=234;
c=&a;
b=*c;
printf(“The address of variable a = %u”,&a);
printf(“The address of Pointer c =%u”,&c);
printf(“value of a=%d”,a);
printf(“value of pointer c=%d”,*c);
printf(“The address of b = %u”,&b);
printf(“The value of b = %d”,b);
getch();
}
इस उदहारण मे ‘%u’ type specifier है जो की किसी variable के address के लिए use किया जाता है |
आउटपुट होगा :
The address of variable a = 4258
The address of Pointer c = 4260
value of a= 234
value of pointer c= 4258
The address of b =4262
The value of b = 234
Pointer of Pointer :
C language मे ये possible है की कोई pointer किसी दुसरे pointer को point कर सकते है |इसे pointer of pointer कहते है |इसका syntax है :
data type ** pointer_name ;
यहा पर दो indirection operator ये indicate करते है की pointer_name एक एस pointer है जो किसी दुसरे pointer के address को contain करेगा |जैसे जैसे indirection operator की सख्या बढती जाएगी वैसे-वैसे pointer to pointer level भी बढेगा|
इसका उदाहरण है :-
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b;
int *c,**e;
a=234;
c=&a;
b=*c;
e=&c;
printf(“The address of variable a = %u”,&a);
printf(“The address of Pointer c =%u”,&c);
printf(“value of a=%d”,a);
printf(“value of pointer c=%d”,*c);
printf(“The address of b = %u”,&b);
printf(“The value of b = %d”,b);
printf(“The value of pointer e=%d”,*e);
printf(“The address of pointer e = %u”,&e);
getch();
}
इस उदाहरण मे , e एक pointer of pointer है जो की pointer c के address को contain करता है |
आउटपुट होगा :
The address of variable a = 4258
The address of Pointer c = 4260
value of a= 234
value of pointer c= 4258
The address of b =4262
The value of b = 234
The value of pointer e=4260
The address of pointer e = 4264
जब किसी declaration मे int ***f; को declare किया जाता है तो इसका मतलब है ‘f’ एक एस pointer है जो double pointer ( int ** )के address को contain करेगा |