Pointer C programming का एक महत्वपूर्ण concept है। Pointer एक ऐसा variable होता है जो किसी दूसरे variable के memory address को store करता है। लेकिन क्या आपने कभी Pointer to Pointer के बारे में सुना है? यह थोड़ा advanced topic है, जिसमें pointer खुद एक दूसरे pointer का address store करता है।
जैसे pointer एक variable का address store करता है, वैसे ही Pointer to Pointer एक pointer का address store करता है। इसे double pointer भी कहते हैं क्योंकि इसमें दो स्तर (level) के pointers होते हैं।
आसान भाषा में:
Variable | Stores | Example Value |
---|---|---|
int x | Integer value | 10 |
int *p | x का address | 0x7ffc1234 (मान लें) |
int **pp | p का address | 0x7ffc5678 (मान लें) |
Syntax:
type **pointer_to_pointer;
उदाहरण:
int **pp;
यहाँ pp
एक pointer है जो int*
type के pointer को point करता है।
#include <stdio.h>
int main() {
int var = 10;
int *p = &var; // p points to var
int **pp = &p; // pp points to p
printf("Value of var = %d\n", var);
printf("Value using *p = %d\n", *p);
printf("Value using **pp = %d\n", **pp);
return 0;
}
Value of var = 10
Value using *p = 10
Value using **pp = 10
var
में 10 है।p
में var
का address है।pp
में p
का address है।*p
dereference करके var
का value मिलता है।**pp
dereference करके भी var
का value मिलता है।
#include <stdio.h>
void changePointer(int **ptr) {
static int var = 20;
*ptr = &var;
}
int main() {
int x = 10;
int *p = &x;
printf("Before change: *p = %d\n", *p); // Output: 10
changePointer(&p);
printf("After change: *p = %d\n", *p); // Output: 20
return 0;
}
p
x
को point करता है जिसका value 10 है।p
का address पास करते हैं (&p
)।*ptr
को नया address assign करते हैं।p
का value बदल जाता है।जब आप 2D arrays या multi-dimensional arrays dynamically allocate करना चाहते हैं, तब pointer to pointer बहुत काम आता है।
#include <stdio.h>
#include <stdlib.h>
int main() {
int **arr;
int rows = 3, cols = 4;
arr = (int **)malloc(rows * sizeof(int*)); // rows के लिए memory allocate
for (int i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int)); // हर row में cols के लिए memory allocate
}
// values assign और print करना
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = i + j;
printf("%d ", arr[i][j]);
}
printf("\n");
}
// memory free करना
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
हाँ, triple pointer (***) या उससे भी ज्यादा levels के pointers बनाए जा सकते हैं, लेकिन ये कम ही इस्तेमाल होते हैं।
नहीं, आप किसी भी data type के pointer का pointer बना सकते हैं, जैसे char **
, float **
आदि।
जब आपको pointer variable को function में modify करना हो या multi-dimensional arrays बनानी हों।
Pointer to pointer C language का एक advanced लेकिन जरूरी concept है। यह pointers के addresses को संभालता है, जिससे complex data structures और functions में pointer manipulation आसान होता है। इसे सही से समझना C programming में आगे बढ़ने के लिए बहुत ज़रूरी है।