References — lvalue references, difference from pointers
5.2.2· Coding › C++ Programming
lvalue reference KYA hota hai?
"lvalue" KYU? lvalue woh expression hota hai jo kisi storage location ka naam deta hai (yeh = ke left pe baith sakta hai). lvalue reference sirf aisi cheez se bind ho sakta hai — tum int& r = 5; nahi likh sakte kyunki 5 ka koi address nahi jise alias kiya ja sake. (Exception const int& r = 5; special hai aur baad mein dikhaya gaya hai.)
Hood ke andar KAISE kaam karta hai
Memory mein ACTUALLY kya hota hai: compiler ek reference ko typically ek aisi pointer ki tarah implement karta hai jo auto-deref ho — lekin semantically koi alag object nahi hota. Tumhe reference ka apna address kabhi nahi dikhta; &r tumhe &x deta hai.

References vs Pointers — core comparison
| Feature | Reference int& |
Pointer int* |
|---|---|---|
| Kya alag object hai? | Nahi (alias) | Haan (address hold karta hai) |
| Initialize karna zaroori? | Haan | Nahi |
| Null ho sakta hai? | Nahi | Haan (nullptr) |
| Reseat ho sakta hai? | Nahi | Haan |
| Use karne ka syntax | r (auto-deref) |
*p (explicit deref) |
| Address-of deta hai | original ka address | pointer ka khud ka address |
| Pointer arithmetic | Nahi | Haan |
References KYU exist karte hain — pass-by-reference
Sabse bada use: caller ki variable ko copy kiye bina modify karo.
Common mistakes (Steel-man + fix)
Active recall
Recall Quick self-test (answers chhupa ke karo)
- Kya reference null ho sakta hai? → Nahi.
- Kya reference ko kisi aur variable ka alias banane ke liye reseat kiya ja sakta hai? → Nahi.
int& r = x;ke liye&rkya return karta hai? →&x(same address).const int& r = 5;compile kyun hota hai lekinint& r = 5;nahi? → const ref temporary bind kar sakta hai; non-const nahi kar sakta.std::stringparameter ki jagahconst std::string&prefer karne ki ek wajah? → copying se bachata hai.
Recall Feynman: 12-saal ke bacche ko samjhao
Socho tumhara dog "Rex" naam ka hai. Tumhari chhoti behan use "Buddy" bulana shuru kar deti hai. Ab dog ke do naam hain lekin woh ek hi dog hai — koi bhi naam pukaro, wahi dog aata hai. Reference variable ka doosra nickname hai: do naam, ek cheez. Pointer alag hai — yeh ek sticky note ki tarah hai jisme dog ke ghar ka address likha ho. Tum note mita ke doosra address likh sakte ho (kahin aur point karo), ya ise blank chhod sakte ho. Nickname kabhi doosre dog ke liye nahi badla ja sakta, aur kabhi blank nahi ho sakta.
Connections
- Pointers in C++ — reseatable, nullable cousin
- Pass-by-value vs Pass-by-reference
- const correctness —
const T¶meters - Rvalue references and move semantics —
T&&, isi pe build karta hai - Dangling references and lifetime
- sizeof and object identity
lvalue reference kya hota hai?
Kya lvalue reference ko declaration pe initialize karna zaroori hai?
int& r; illegal hai.Kya lvalue reference baad mein kisi doosre object ko refer karne ke liye reseat ho sakta hai?
Kya reference null ho sakta hai?
int& r = x; ke liye &r kya evaluate hota hai?
&x — original ka address (reference ka koi alag address nahi hota).int& r = 5; fail kyun hota hai lekin const int& r = 5; succeed karta hai?
Reference aur T* const pointer mein kya fark hai?
Parameter ke roop mein std::string ki jagah const std::string& kyun prefer karein?
Local variable ka reference return karne ka kya khatre?
swap(int& a, int& b) mein andar * ya & kyun nahi chahiye?
a aur b caller ki variables ke aliases hain, directly use hote hain.