🎯
Pointers

Pointers to Pointers

Double Indirection
💡 Pointer to pointer ek address ka address hai — jaise ek dost tumhe ek chitthi deta hai jisme likha hai "doosre dost ka address is dabbe mein hai", aur us dabbe ko khologe to teesre dost ka asli address milega.

int pp ek pointer hai jo kisi doosre pointer (int *) ka address store karta hai. *pp se tumhe wo pointer milta hai, pp se tumhe uske through asli value milti hai.

Ye tab useful hota hai jab function ko ek pointer ko khud modify karna ho (na ki jis cheez ko wo point kar raha hai) — jaise ek function jo dynamically memory allocate kare aur caller ke pointer ko update kare.

int x = 10;
int *p = &x;
int **pp = &p;

printf("%d\n", x);    // 10
printf("%d\n", *p);   // 10
printf("%d\n", **pp); // 10 — double dereference
🎯
Pointer to pointer ek address ka address hai — jaise ek dost tumhe ek chitthi deta hai jisme likha hai "doosre dost ka address is dabbe mein hai", aur us dabbe ko khologe to teesre dost ka asli address milega.
1 / 2
⚡ Quick Recap
  • int **pp = pointer to a pointer
  • **pp se double dereference karke asli value milti hai
  • Use hota hai jab function ko khud pointer modify karna ho
On this page (2 subtopics)

char grid ek bahut common pattern hai jab tumhe ek "array of arrays" chahiye jinki sizes runtime par decide honi hain — jaise ek array of strings (char* har ek string hai, aur ek array of these pointers, jise access karne ke liye char chahiye).

Ye static 2D arrays (int grid[3][4]) se alag hai — dynamic version mein har "row" apni alag memory allocation ho sakti hai, alag sizes ki bhi ho sakti hai (jaise ek "jagged array" jaisa concept).

char *names[3] = {"Aarav", "Riya", "Zoya"};
char **p = names;  // pointer to pointer

printf("%s\n", p[0]);   // Aarav
printf("%s\n", *(p+1)); // Riya
printf("%s\n", names[2]); // Zoya
💡Tip: char **argv (main function ka parameter) isi pattern ka sabse common real-world example hai — command-line arguments ka array of strings.

Jab tum ek C program terminal se run karte ho arguments ke saath ($ ./program hello world), main() unhe do parameters ke through receive kar sakta hai: int argc (kitne arguments hain, program ka naam bhi count hota hai) aur char **argv (actual arguments, strings ke array ke roop mein).

argv[0] hamesha program ka khud ka naam hota hai, argv[1] pehla actual argument hai, waghera. char **argv ka matlab hai "array of strings", jaha har string khud ek char* hai.

// $ ./greet Aarav 25

int main(int argc, char **argv) {
  printf("%d\n", argc);       // 3 (program name + 2 args)
  printf("%s\n", argv[0]);    // ./greet
  printf("%s\n", argv[1]);    // Aarav
  printf("%s\n", argv[2]);    // 25
  return 0;
}