Pass by value — copy. Pass by reference — alias. Pass by pointer — address.
Pass by value:
1void func(int x) {2 x = 100; // Changes only local copy3}45int main() {6 int a = 10;7 func(a);8 std::cout << a; // 10 (unchanged)9}
Pass by reference:
1void func(int& x) {2 x = 100; // Changes original3}45int main() {6 int a = 10;7 func(a);8 std::cout << a; // 100 (changed!)9}
Pass by pointer:
1void func(int* x) {2 *x = 100; // Dereference and change3}45int main() {6 int a = 10;7 func(&a); // Pass address8 std::cout << a; // 100 (changed!)9}
Key differences:
When to use: