Free tutorials & notes in Hindi & English · Clean code examples · Mobile friendly learning
Free tutorials in Hindi & English Daily computer, mobile and IT guides Beginner friendly learning
Blog · C++ · 04 Jul 2026 · Hindi + English

C++ में Reference vs Pointer (Alias vs Address)

Reference existing variable का permanent दूसरा नाम है; pointer address रखने वाला अलग variable. Swap function proof के साथ 6 अंतर.

The nickname analogy

A reference is a nickname. If Aman's family calls him "Monu", then Monu is not a second person — Aman and Monu are the same person with two names. Feeding Monu feeds Aman. A pointer is a slip of paper with Aman's home address written on it — it is a separate thing that you can carry, change, or leave blank. The address slip can be rewritten to point to Priya's house; but Monu can never become Priya's nickname.
int aman = 100;

int &monu = aman;      // REFERENCE: second name for the SAME variable
int *slip = &aman;     // POINTER  : separate variable holding an address

monu = 150;            // change through nickname -> aman itself changes
cout << aman;          // 150
150

The 3 rules that make references different

int a = 10, b = 20;

// RULE 1: must be initialized at birth
int &r;            // ERROR: references must be initialized
int *p;            // OK for pointer (though dangerous)

// RULE 2: can never be re-seated to another variable
int &r2 = a;
r2 = b;            // careful! this does NOT re-point r2 -
                   // it COPIES b's value (20) into a!
cout << a;         // 20

// RULE 3: no "null reference" exists
int *p2 = NULL;    // pointer can be null
                   // reference: no such thing - always refers to something

Where it matters most: the swap function

#include <iostream>
using namespace std;

void swapPtr(int *x, int *y) {           // pointer version
    int t = *x; *x = *y; *y = t;          // stars everywhere
}
void swapRef(int &x, int &y) {            // reference version
    int t = x; x = y; y = t;              // clean, natural syntax
}

int main() {
    int a = 5, b = 9;
    swapPtr(&a, &b);                      // caller must pass addresses
    cout << a << " " << b << endl;
    swapRef(a, b);                        // caller passes variables directly
    cout << a << " " << b << endl;
    return 0;
}
9 5 5 9

Both work, but the reference version reads like normal code — no *, no & at the call site. This is exactly why C++ added references: clean pass-by-reference for functions.

Comparison table (6 differences)

PointReferencePointer
What it isSecond name (alias)Variable storing an address
InitializationCompulsory at declarationOptional
Can be null❌ Never✅ Yes (nullptr)
Re-seat later❌ Never — bound for life✅ Can point anywhere anytime
Syntax to accessDirect: r = 5;Dereference: *p = 5;
Arithmetic (p++)❌ No✅ Yes

Which to use when

  • Reference — function parameters and return values where "nothing" is impossible: void update(Student &s). Cleaner and safer.
  • Pointer — when the target can change, can be absent (nullptr), or you need arrays/dynamic memory: linked lists, optional values, new.
  • Interview line: "A reference is a permanently-bound, never-null alias; a pointer is a re-seatable, nullable address holder."

Nickname वाली analogy

Reference एक nickname है. अगर Aman को घरवाले "Monu" बुलाते हैं, तो Monu कोई दूसरा इंसान नहीं — Aman और Monu एक ही इंसान के दो नाम हैं. Monu को खाना खिलाया तो Aman को ही खिलाया. Pointer एक पर्ची है जिस पर Aman के घर का address लिखा है — यह एक अलग चीज़ है जिसे आप रख सकते हैं, बदल सकते हैं, या खाली छोड़ सकते हैं. Address की पर्ची पर Priya के घर का address लिखा जा सकता है; लेकिन Monu कभी Priya का nickname नहीं बन सकता.
int aman = 100;

int &monu = aman;      // REFERENCE: SAME variable का दूसरा नाम
int *slip = &aman;     // POINTER  : address रखने वाला अलग variable

monu = 150;            // nickname से change -> aman खुद बदल गया
cout << aman;          // 150
150

3 rules जो references को अलग बनाते हैं

int a = 10, b = 20;

// RULE 1: जन्म पर ही initialize करना ज़रूरी
int &r;            // ERROR: references must be initialized
int *p;            // pointer के लिए OK (खतरनाक होते हुए भी)

// RULE 2: बाद में किसी और variable से नहीं जुड़ सकता
int &r2 = a;
r2 = b;            // सावधान! यह r2 को re-point NAHI करता -
                   // b की value (20) को a में COPY करता है!
cout << a;         // 20

// RULE 3: "null reference" जैसी चीज़ नहीं होती
int *p2 = NULL;    // pointer null हो सकता है
                   // reference: ऐसा कुछ नहीं - हमेशा किसी से जुड़ा

सबसे ज़्यादा फर्क कहां: swap function

#include <iostream>
using namespace std;

void swapPtr(int *x, int *y) {           // pointer version
    int t = *x; *x = *y; *y = t;          // हर जगह stars
}
void swapRef(int &x, int &y) {            // reference version
    int t = x; x = y; y = t;              // साफ, natural syntax
}

int main() {
    int a = 5, b = 9;
    swapPtr(&a, &b);                      // caller को addresses भेजने पड़ते हैं
    cout << a << " " << b << endl;
    swapRef(a, b);                        // caller directly variables भेजता है
    cout << a << " " << b << endl;
    return 0;
}
9 5 5 9

दोनों काम करते हैं, लेकिन reference version normal code जैसा पढ़ा जाता है — call site पर न *, न &. C++ ने references इसीलिए जोड़े: functions के लिए साफ-सुथरा pass-by-reference.

Comparison table (6 अंतर)

PointReferencePointer
क्या हैदूसरा नाम (alias)Address store करने वाला variable
InitializationDeclaration पर compulsoryOptional
Null हो सकता है❌ कभी नहीं✅ हां (nullptr)
बाद में re-seat❌ कभी नहीं — ज़िंदगी भर का बंधन✅ कभी भी कहीं भी point कर सकता है
Access syntaxDirect: r = 5;Dereference: *p = 5;
Arithmetic (p++)❌ नहीं✅ हां

कब कौन-सा use करें

  • Reference — function parameters और return values जहां "कुछ नहीं" impossible है: void update(Student &s). साफ और safe.
  • Pointer — जब target बदल सकता है, absent हो सकता है (nullptr), या arrays/dynamic memory चाहिए: linked lists, optional values, new.
  • Interview line: "Reference permanently-bound, कभी-null-न-होने वाला alias है; pointer re-seatable, nullable address holder."

Frequently Asked Questions

Reference और pointer में क्या अंतर है?

Reference existing variable का permanent alias है — initialize करना ज़रूरी, कभी null या re-seat नहीं हो सकता — जबकि pointer address रखने वाला अलग variable है जो null हो सकता है, reassign हो सकता है और arithmetic में use होता है.

क्या C++ में reference null हो सकता है?

नहीं. Reference को declaration पर ही किसी valid variable से बांधना ज़रूरी है और वह पूरी ज़िंदगी उसी से बंधा रहता है; null होना pointer का feature है.

Initialization के बाद reference को assign करने पर क्या होता है?

Assignment value को original variable में copy करता है — reference re-point नहीं होता, क्योंकि references कभी re-seat नहीं हो सकते.