MCAWALA

C Programming Tutorial

C Programming में Pointer to Pointer – आसान हिंदी में समझें

Pointer C programming का एक महत्वपूर्ण concept है। Pointer एक ऐसा variable होता है जो किसी दूसरे variable के memory address को store करता है। लेकिन क्या आपने कभी Pointer to Pointer के बारे में सुना है? यह थोड़ा advanced topic है, जिसमें pointer खुद एक दूसरे pointer का address store करता है।

Pointer to Pointer क्या होता है?

जैसे pointer एक variable का address store करता है, वैसे ही Pointer to Pointer एक pointer का address store करता है। इसे double pointer भी कहते हैं क्योंकि इसमें दो स्तर (level) के pointers होते हैं।

आसान भाषा में:

  • Variable में कोई data होता है (जैसे int x = 10;)
  • Pointer में variable का address होता है (int *p = &x;)
  • Pointer to Pointer में pointer का address होता है (int **pp = &p;)

Pointer और Pointer to Pointer का तालिका में संबंध:

Variable Stores Example Value
int x Integer value 10
int *p x का address 0x7ffc1234 (मान लें)
int **pp p का address 0x7ffc5678 (मान लें)

Pointer to Pointer कैसे Declare करें?

Syntax:

type **pointer_to_pointer;

उदाहरण:

int **pp;

यहाँ pp एक pointer है जो int* type के pointer को point करता है।

Pointer to Pointer का Example


#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;
}
  

Output:


Value of var = 10
Value using *p = 10
Value using **pp = 10
  

Explanation:

  • var में 10 है।
  • p में var का address है।
  • pp में p का address है।
  • *p dereference करके var का value मिलता है।
  • **pp dereference करके भी var का value मिलता है।

Pointer to Pointer का उपयोग क्यों और कब करें?

  • Multi-level Data Structures: जैसे 2D arrays, linked lists, trees में complex data handle करने के लिए।
  • Functions में Pointer को Modify करना: जब function में pointer variable की value को change करना हो ताकि वो main function में reflect हो।

Function में Pointer to Pointer Example


#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;
}
  

Explanation:

  • Initially, p x को point करता है जिसका value 10 है।
  • Function में हम p का address पास करते हैं (&p)।
  • Function में *ptr को नया address assign करते हैं।
  • इसलिए main function में p का value बदल जाता है।

Pointer to Pointer और Dynamic Memory Allocation

जब आप 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;
}
  

Pointer to Pointer से जुड़ी सामान्य गलतियाँ (Common Mistakes)

  • Uninitialized Pointer to Pointer: इसे valid address से initialize न करना program crash कर सकता है।
  • गलत Dereferencing: Pointer to pointer को dereference करते वक्त * और ** का सही उपयोग जरूरी है।
  • Memory Leak: Dynamic memory allocate करने के बाद उसे free करना न भूलें।

अक्सर पूछे जाने वाले सवाल (FAQs)

क्या pointer to pointer से ज्यादा levels भी हो सकते हैं?

हाँ, triple pointer (***) या उससे भी ज्यादा levels के pointers बनाए जा सकते हैं, लेकिन ये कम ही इस्तेमाल होते हैं।

क्या pointer to pointer सिर्फ int pointers के लिए होता है?

नहीं, आप किसी भी data type के pointer का pointer बना सकते हैं, जैसे char **, float ** आदि।

Pointer to pointer कब जरूरी होता है?

जब आपको pointer variable को function में modify करना हो या multi-dimensional arrays बनानी हों।

निष्कर्ष

Pointer to pointer C language का एक advanced लेकिन जरूरी concept है। यह pointers के addresses को संभालता है, जिससे complex data structures और functions में pointer manipulation आसान होता है। इसे सही से समझना C programming में आगे बढ़ने के लिए बहुत ज़रूरी है।