Introduction to C++ | References

C++ References

A reference in C++ is an alias for an existing variable. It allows you to use a different name to refer to the same memory location. References are used in many cases, including function parameter passing, where they allow you to modify the argument passed to the function.

What is a Reference?

A reference is an alternative name for an existing variable. It is declared using the & symbol, which is also the address-of operator when used with variables. However, when used in a declaration, it creates a reference.

Syntax:

Syntax of Reference


        type& referenceName = variableName;
                    

Example of Reference

Here’s an example showing how to declare and use a reference:

Code Example: Reference


        #include <iostream>
        using namespace std;
        
        int main() {
            int a = 10;
            
            // Declare a reference to the variable 'a'
            int& ref = a;
            
            // Modify the value of 'a' through the reference
            ref = 20;
            
            cout << "a: " << a << endl;  // a is now 20
            cout << "ref: " << ref << endl;  // ref is also 20
            
            return 0;
        }
                    

Output

a: 20
ref: 20

References vs Pointers

While both references and pointers can be used to refer to variables, there are key differences between them:

In simple terms, references provide a safer and more straightforward way of referencing a variable than pointers, but they come with their own set of restrictions.

References as Function Parameters

References are commonly used in function parameters to allow the function to modify the actual argument passed to it. This can be more efficient than passing by value, especially for large objects like arrays or classes, as no copying occurs.

Example of passing a reference to a function:

Code Example: References as Function Parameters


        #include <iostream>
        using namespace std;
        
        // Function that takes a reference as a parameter
        void increment(int& ref) {
            ref++;
        }
        
        int main() {
            int num = 10;
            
            // Pass num by reference to the function
            increment(num);
            
            cout << "num after increment: " << num << endl;  // num is now 11
            
            return 0;
        }
                    

Output

num after increment: 11

References for Const Variables

You can also have references to constant variables. A reference to a const variable ensures that the value of the variable cannot be changed through that reference.

Example of a reference to a constant:

Code Example: Reference to Const


        #include <iostream>
        using namespace std;
        
        int main() {
            const int x = 10;
            
            // Reference to a constant variable
            const int& ref = x;
            
            cout << "x: " << x << endl;  // x is 10
            cout << "ref: " << ref << endl;  // ref is also 10
            
            // ref = 20;  // This would cause a compile-time error because ref is constant
            
            return 0;
        }
                    

Output

x: 10
ref: 10

References for Arrays

References can also be used with arrays. When you pass an array to a function by reference, the function operates on the actual array, rather than a copy of it, which is more efficient for large arrays.

Example of a reference to an array:

Code Example: Reference to an Array


        #include <iostream>
        using namespace std;
        
        // Function that takes a reference to an array
        void modifyArray(int (&arr)[5]) {
            for (int i = 0; i < 5; i++) {
                arr[i] += 5;
            }
        }
        
        int main() {
            int arr[5] = {1, 2, 3, 4, 5};
            
            // Pass array by reference to the function
            modifyArray(arr);
            
            cout << "Modified array: ";
            for (int i = 0; i < 5; i++) {
                cout << arr[i] << " ";
            }
            cout << endl;
            
            return 0;
        }
                    

Output

Modified array: 6 7 8 9 10

Conclusion

References in C++ provide a convenient way to refer to variables without copying their values. They are particularly useful when passing arguments to functions where you want to modify the original data. Unlike pointers, references do not require dereferencing, and they provide a safer and simpler way of handling variables. However, references are less flexible than pointers because they must always refer to a valid object and cannot be changed to reference another object after initialization.

Pro Tip:

💡 Pro Tip

When you want to modify the original variable in a function without creating a copy, use references instead of pointers for better readability and safety.