Pointer to pointer
5.1.12· Coding › C Programming
YEH HAI KYA?
Type mein ** kyun chahiye?
C mein type compiler ko batata hai ki target address ke bytes ko kaise interpret karna hai. Jab tum *pp likhte ho, compiler ko pata hona chahiye ki "pp pe jo cheez hai woh khud ek pointer hai," isliye int ** chahiye. Ek * ka matlab hoga "dereference karne pe int milega" — yeh galat hai, kyunki yahan dereference karne pe ek pointer milta hai.
Dereferencing HOW KARTA HAI layers ko peel
Har * ek level of indirection hata deta hai.
| Expression | Meaning | Value (neeche diye addresses use karke) |
|---|---|---|
pp |
p ka address |
&p = 0x300 |
*pp |
p mein stored value |
&x = 0x100 |
**pp |
x mein stored value |
42 |

KYUN chahiye yeh? (80/20 core)
20% use-cases jo 80% real code cover karte hain:
- Ek function ke andar pointer ko modify karna. C value se pass karta hai. Caller ke pointer ko change karne ke liye, uska address pass karna padta hai → ek
int **. - Arrays of strings / 2-D dynamic arrays.
char **argv,char **lines. - Linked-list/tree edits jahan tumhe node-pointer khud update karna hota hai.
Common mistakes (Steel-manned)
Flashcards
int **pp kya store karta hai?
Agar pp = &p aur p = &x, to *pp kya hai?
p ki value, jo ki &x hai (x ka address).Agar pp = &p aur p = &x, to **pp kya hai?
x ki value — int tak poora dereference.Function ko int ** kyun pass karte hain?
Ek function ke andar int vs int* modify karne ke liye kitne * chahiye?
* (int* pass karo); pointer ke liye do * (int** pass karo).Jab pp int** ho, to *pp ka type kya hai?
int* — int ki taraf pointer.char **argv mein, *argv kya hai?
char* — pehle command-line string ki taraf pointer.Har * "ek layer kyun peel" karta hai?
Agar *pp (yaani p) NULL ho to **pp ka kya hoga?
Kya *pp = NULL final value x ko change karta hai?
p ko overwrite karta hai; x untouched rehta hai.Recall Feynman: ek 12-saal ke bacche ko explain karo
Ek khazane ki kalpana karo. Tumhare paas ek chit hai jo kehti hai "khazana box A mein hai." Woh chit ek pointer hai. Ab tumhare paas ek aur chit hai jo kehti hai "pehli chit kitchen table pe rakhi hai." Woh doosri chit ek pointer to a pointer hai — yeh seedha khazane ki taraf point nahi karti, balki us chit ki taraf point karti hai jo khazane ki taraf point karti hai. Khazana paane ke liye tum chit 2 padhte ho → table pe jaate ho → chit 1 padhte ho → box A pe jaate ho → kholte ho. C mein har * ek "jahan chit boli wahan jaao" hai. Do * matlab do safar, to tum khazane (42) tak pahunch jaate ho. Ek * sirf chit 1 tak pahunchata hai.
Connections
- Pointers basics — single-level foundation jis pe yeh build karta hai.
- Pass by value vs pass by reference — kyun functions ke liye
**chahiye. - Dynamic memory allocation (malloc) — allocated memory return karne ke liye
int **. - Command line arguments (argv) — practice mein
char **argv. - Pointer arithmetic —
pp+1kaisesizeof(pointer)ke steps mein chalti hai. - 2-D arrays vs pointer to pointer — memory layout mein subtle differences.