5.1.12 · HinglishC Programming

Pointer to pointer

1,606 words7 min readRead in English

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
Figure — Pointer to pointer

KYUN chahiye yeh? (80/20 core)

20% use-cases jo 80% real code cover karte hain:

  1. 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 **.
  2. Arrays of strings / 2-D dynamic arrays. char **argv, char **lines.
  3. Linked-list/tree edits jahan tumhe node-pointer khud update karna hota hai.

Common mistakes (Steel-manned)


Flashcards

int **pp kya store karta hai?
Ek pointer variable ka address (ek pointer to a pointer).
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?
Taaki function caller ke pointer ko modify kar sake, kyunki C arguments by value pass karta hai.
Ek function ke andar int vs int* modify karne ke liye kitne * chahiye?
Int ke liye ek * (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?
Ek char* — pehle command-line string ki taraf pointer.
Har * "ek layer kyun peel" karta hai?
Kyunki dereference ka matlab hai "address follow karo ek step aage jis cheez ki taraf point karta hai."
Agar *pp (yaani p) NULL ho to **pp ka kya hoga?
Undefined behaviour / crash — tum ek NULL pointer dereference kar rahe ho.
Kya *pp = NULL final value x ko change karta hai?
Nahi — yeh pointer 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 referencekyun functions ke liye ** chahiye.
  • Dynamic memory allocation (malloc) — allocated memory return karne ke liye int **.
  • Command line arguments (argv) — practice mein char **argv.
  • Pointer arithmeticpp+1 kaise sizeof(pointer) ke steps mein chalti hai.
  • 2-D arrays vs pointer to pointer — memory layout mein subtle differences.

Concept Map

holds &x

holds &p

declared with two asterisks

equals p, yields &x

equals x, yields 42

peels via star of star_pp

enables

enables

enables

pass &q to change caller pointer

int x = 42

pointer p

pointer to pointer pp

*pp

**pp

Two levels of indirection

Modify pointer in function

Array of strings char argv

Linked-list node edits