Difference between Pointer and Reference in Programming
Last Updated :
23 May, 2024
Effective memory management is essential in the field of programming. When talking about memory addresses and data access, two key ideas—pointers and references—come into play. Writing clean and secure code requires an understanding of their primary differences, even though they have certain similarities.
Pointers
Consider a pointer to be a compass that directs you to a particular spot. The memory address of another variable is kept in a pointer variable. This address tells you where to find the actual data, much like a compass direction. The dereference operator (*), which functions as a compass to guide you to the destination, is used to access the data.
Key characteristics of pointers:
- Can be null, meaning they don't point to any valid memory location.
- Can be reassigned to point to different variables.
- Need to be dereferenced to access the data they point to.
- Offer more flexibility but can be error-prone if not used carefully (dangling pointers, memory leaks).
Example:
int x = 10;
int* ptr = &x; // ptr now points to the memory address of x
int value = *ptr; // dereference ptr to access the value at x (which is 10)
C++
#include <iostream>
using namespace std;
int main()
{
int x = 10; // Integer variable
int* ptr = &x; // Pointer variable that stores the
// address of x
cout << "Value of x: " << x
<< endl; // Outputs the value of x
cout << "Memory address of x: " << ptr
<< endl; // Outputs the memory address of x
cout << "Value at the memory address stored in ptr: "
<< *ptr
<< endl; // Dereferences ptr to get the value of x
return 0;
}
Java
public class Main {
public static void main(String[] args) {
int x = 10; // Integer variable
Integer X = new Integer(x); // Integer object
int ptr = System.identityHashCode(X); // Memory address of X
System.out.println("Value of x: " + x);
System.out.println("Memory address of x: " + ptr);
System.out.println("Value at the memory address stored in ptr: " + X.intValue());
}
}
OutputValue of x: 10
Memory address of x: 0x7ffc13f1d454
Value at the memory address stored in ptr: 10
References
Think about a reference as a different name for an already-existing variable, similar to an alias. Basically, you're creating a second way to access the same memory when you create a reference. References need to be initialized at declaration with a valid variable, unlike pointers, which are not nullable.
Key characteristics of references:
- Always refer to an existing variable.
- Cannot be reassigned to point to another variable.
- Accessed directly, no dereferencing required.
- Generally safer to use than pointers as they prevent null pointer exceptions.
Example:
int x = 10;
int& ref = x; // ref becomes another name for x
ref = 20; // Modifying ref modifies x as well (x is now 20)
C++
#include <iostream>
using namespace std;
int main() {
int x = 10; // Integer variable
int& ref = x; // Reference to x
cout << "Original value of x: " << x << endl; // Outputs 10
ref = 20; // Modifying ref modifies x
cout << "New value of x: " << x << endl; // Outputs 20
return 0;
}
Java
public class Main {
public static void main(String[] args) {
int[] x = new int[1]; // Integer array with one element
x[0] = 10; // Assigning 10 to the first element
System.out.println("Original value of x: " + x[0]); // Outputs 10
x[0] = 20; // Modifying the first element of the array modifies x
System.out.println("New value of x: " + x[0]); // Outputs 20
}
}
Python
x = [10]
# Reference to x
ref = x
print("Original value of x:", x[0]) # Outputs 10
# Modifying ref modifies x
ref[0] = 20
print("New value of x:", x[0]) # Outputs 20
JavaScript
// JavaScript program demonstrating object references
// Create an object
let obj = { value: 10 };
// Reference to the object
let ref = obj;
// Display the original value
console.log("Original value of obj.value:", obj.value); // Outputs 10
// Modify the value through the reference
ref.value = 20;
// Display the updated value
console.log("New value of obj.value:", obj.value); // Outputs 20
OutputOriginal value of x: 10
New value of x: 20
Differences between pointers and references:
Feature
| Pointer
| Reference
|
---|
Definition
| Stores the memory address of another variable
| Creates an alias for an existing variable
|
---|
Initialization
| Can be declared without initialization
| Must be initialized with a valid variable at declaration
|
---|
Null Value
| Can be assigned NULL
| Cannot be assigned NULL
|
---|
Reassignment
| Can be reassigned to point to different variables
| Cannot be reassigned to another variable
|
---|
Memory Allocation
| Does not allocate memory itself
| Does not allocate memory itself
|
---|
Memory Location
| Has its own memory address and size
| Shares the memory address of the original variable
|
---|
Access
| Accessed through dereferencing (*)
| Accessed directly (no dereferencing required)
|
---|
Safety
| More error-prone (dangling pointers, memory leaks)
| Generally safer (prevents null pointer exceptions)
|
---|
Use Cases
| Dynamic memory allocation, complex data structures
| Function arguments (pass by reference), improve readability
|
---|
Similar Reads
Difference between int* p() and int (*p)()? A pointer is a variable whose value is the address of another variable, i.e., direct address of the memory location. Like any variable or constant, a pointer must be declare before storing any variable address. The general form of a pointer variable declaration is: Syntax: type *var_name; Here, type
2 min read
Difference between Citation and Reference Citation and Reference are often used interchangeably but they have distinct meanings in academic writing. A citation is a brief notation within the body of a text that indicates the source of information, ideas, or quoted material; whereas, a reference is a detailed entry at the end of a document t
5 min read
Difference between File Descriptor and File Pointer File descriptor is simply an index into the file descriptor table. For each process in our operating system, there is a process control block(PCB). PCB keeps track of the context of the process. So one of the fields within this is an array called file descriptor table. This array keeps track of all
3 min read
Difference between Definition and Declaration In programming, the terms declaration and definition are often used interchangeably, but they have distinct meanings and purposes. A declaration is a way of informing the program about the name and type of an entity it will handle while a definition allocate storage or defines where the implementati
5 min read
Difference Between Call by Value and Call by Reference in C++ In C++, there are two primary methods to pass an argument to a function: Call by Value and Call by Reference. These methods dictate how data is transferred to functions and how changes to the data are handled.Before we look into the difference, we first need to know what actual and formal parameters
3 min read
Difference Between Call by Value and Call by Reference in C Functions can be invoked in two ways: Call by Value or Call by Reference. These two ways are generally differentiated by the type of values passed to them as parameters.The following table lists the differences between the call-by-value and call-by-reference methods of parameter passing.Call By Valu
4 min read