Pointers
Pointer facts
A pointer is a variable. It stores a number. That number represents a memory address.
Therefore we say it points to some data.
Pointers can have a type (e.g.
int
,char
) or they can bevoid
.The type will hint what you want to interpret the data that is pointed to, as.
If you use
void
, you may need to specify a type later.
Example
A pointer is a C++ variable that stores the address of some other variable.
Pointers store the RAM address of a variable.
Note that pointer syntax is to declare a variable with an asterisk * next to it, accessing the address of a variable with with an ampersand &, and dereferencing a pointer (accessing whatever is inside the address of a pointer) is also with an asterisk *.
Think of a pointer like knowing a specific index in an array: if you know the direct index, you can just look directly to find the variable you want.
Declaring a pointer
You declare a pointer just like how you would any variable, but add an asterisk (*
) in between the type and the name.
Example:
Pointer arithmetic
Pointer arithmetic refers to addition or subtraction between a pointer and an integer.
The value of a pointer is the memory address it holds. It is expressed in bytes.
Most types occupy more than one byte in memory. (e.g. float
uses four bytes.)
The integer represents how many elements of the pointer's type we're shifting the address by.
Finally the address shifts by the number of bytes needed to store that number of elements.
Example:
Pointers are powerful features of C++ that differentiates it from other programming languages like Java and Python.
Pointers are used in C++ program to access the memory and manipulate the address.
Address in C++
To understand pointers, you should first know how data is stored on the computer.
Each variable you create in your program is assigned a location in the computer's memory. The value the variable stores is actually stored in the location assigned.
To know where the data is stored, C++ has an & operator. The & (reference) operator gives you the address occupied by a variable.
If var
is a variable then, &var
gives the address of that variable.
Example 1: Address in C++
Output
Note: You may not get the same result on your system.
The 0x in the beginning represents the address is in hexadecimal form.
Notice that first address differs from second by 4-bytes and second address differs from third by 4-bytes.
This is because the size of integer (variable of type int
) is 4 bytes in 64-bit system.
Pointers Variables
C++ gives you the power to manipulate the data in the computer's memory directly. You can assign and de-assign any space in the memory as you wish. This is done using Pointer variables.
Pointers variables are variables that points to a specific address in the memory pointed by another variable.
How to declare a pointer?
The statement above defines a pointer variable p. It holds the memory address
The asterisk is a dereference operator which means pointer to.
Here, pointer p is a pointer to int
, i.e., it is pointing to an integer value in the memory address.
Reference operator (&) and Deference operator (*)
Reference operator (&) as discussed above gives the address of a variable.
To get the value stored in the memory address, we use the dereference operator (*).
For example: If a number variable is stored in the memory address 0x123, and it contains a value 5.
The reference (&) operator gives the value 0x123, while the dereference (*) operator gives the value 5.
Note: The (*) sign used in the declaration of C++ pointer is not the dereference pointer. It is just a similar notation that creates a pointer.
Example 2: C++ Pointers
C++ Program to demonstrate the working of pointer.
Output
Explanation of program
When
c = 5;
the value 5 is stored in the address of variable c - 0x7fff5fbff8c.When
pc = &c;
the pointer pc holds the address of c - 0x7fff5fbff8c, and the expression (dereference operator)*pc
outputs the value stored in that address, 5.When
c = 11;
since the address pointer pc holds is the same as c - 0x7fff5fbff8c, change in the value of c is also reflected when the expression*pc
is executed, which now outputs 11.When
*pc = 2;
it changes the content of the address stored by pc - 0x7fff5fbff8c. This is changed from 11 to 2. So, when we print the value of c, the value is 2 as well.
Common mistakes when working with pointers
Suppose, you want pointer pc to point to the address of c. Then,
In both cases, pointer pc is not pointing to the address of c.
Last updated