References aur Pointers
Ek reference, jo & se likha jaata hai, ek existing variable ka alias hota hai — ek baar bind hone ke baad, use kabhi bhi kisi aur cheez ko refer karne ke liye reassign nahi kiya ja sakta. Ek function mein reference pass karne se woh function original variable ko modify kar sakta hai, use copy karne ke overhead ke baghair.
#include <iostream>
using namespace std;
void addOne(int& n) {
n = n + 1;
}
int main() {
int x = 5;
addOne(x);
cout << "x = " << x << endl;
return 0;
}x = 6
Pointers
Ek pointer, jo * se likha jaata hai, directly alias karne ke bajaye ek value ka memory address hold karta hai. Reference ke bar-aks, ek pointer ko kahin aur bilkul alag jagah point karne ke liye reassign kiya ja sakta hai, aur yeh null (nullptr) ho sakta hai, jiska matlab hai 'kuch bhi point nahi karta'. & ek address leta hai, * ek pointer ko dereference karta hai us value ko pane ke liye jispar woh point karta hai.
#include <iostream>
using namespace std;
int main() {
int x = 10;
int* p = &x;
cout << "value = " << *p << endl;
*p = 20;
cout << "x = " << x << endl;
return 0;
}value = 10 x = 20
Ek real const-correctness error kaisa dikhta hai
Rust ke bar-aks, C++ mein koi borrow checker nahi hai jo track kare ke kisi bhi waqt value ko kaun read ya write kar sakta hai — lekin yeh const-correctness zarur enforce karta hai: ek function jo ek const reference leta hai, woh promise karta hai ke jispar woh refer karta hai use modify nahi karega, aur compiler use us promise par qaayam rakhta hai. Yeh waqai woh hai jo g++ report karta hai jab woh promise toot jaata hai — ek real run se capture kiya gaya hai, plausible dikhne ke liye likha nahi gaya:
#include <iostream>
using namespace std;
void tryToModify(const int& n) {
n = 100;
}
int main() {
int x = 5;
tryToModify(x);
cout << x << endl;
return 0;
}main.cpp: In function ‘void tryToModify(const int&)’:
main.cpp:5:7: error: assignment of read-only reference ‘n’
5 | n = 100;
| ~~^~~~~Kuch bhi nahi chalta — koi output nahi, bas error. const-correctness un kam cheezon mein se ek hai jo C++ aapko compile-time par free mein deta hai; yahan memory safety ke bare mein baaki sab kuch convention hai, enforcement nahi.
Aage: functions aur overloading — parameters, default arguments, aur function overloading ke through compile-time polymorphism.
Practice exercise
Ek function doubleIt(int& n) likhein jo reference ke through n ko in place double kare. Use x = 21 ke sath call karein, phir x print karein.