Address of a variable
Every variable in C has a memory location where it is stored. This memory location is called the variable's address.
Pointer
A pointer is a variable that stores the address of another variable.
We use the * (asterisk) operator to define pointers and the & (address of) operator to get the address of a variable.
For example:
int a = 10; int *p; p = &a; // p is a pointer to an integer, and now points to address of a
Here
p
is a pointer that stores the address ofa
.We use the -> operator to access the value at the address stored in the pointer.
int val = *p; // val becomes 10, as p contains address of a which has value 10
Pointers allow us to pass variables by reference instead of by value. This is useful to modify the original variable.
Pointer Operators
Here are short notes on the main pointer operators in C:
&
- Address Of Operator
Returns the memory address of a variable.
Syntax: &variable_name
Example
int a = 10; int *ptr; ptr = &a; // ptr points to the address of a
*
Dereference Operator
Accesses the value at the address stored in a pointer.
Syntax: *pointer_name
Example
int val = *ptr; // val becomes 10, as ptr points to address of a which has value 10
->
- Structure Dereference Operator
Accesses a member of a structure through a pointer.
Equivalent to using the
.
operator, but dereferences the pointer first.Example
struct student *p; p->age = 20; // Accesses the age member through pointer p
Format Specifiers for pointers
The format specifiers for pointers in C are:
%p - To print a generic pointer address. This is the preferred way.
%#x - To print a pointer address with 0x prefix.
%x - To print a pointer address as an unsigned hexadecimal integer, without the 0x prefix.
%d would give an
incorrect
result when used to print a pointer address. It may print some decimal number, but that number does not represent the actual pointer address.Example
#include <stdio.h> int main() { int a = 5; int *ptr; ptr = &a; printf("%p\n", ptr); printf("%x\n", ptr); printf("%#x\n", ptr); return 0; }
OUTPUT:
0x7fff17337f4c
17337f4c
0x17337f4c
Size of pointer variable
The size of a pointer variable depends on the system architecture. It can be 4 bytes or 8 bytes, depending on whether it is a 32-bit or 64-bit system.
On 32-bit systems, pointers are usually 4 bytes in size
On 64-bit systems, pointers are usually 8 bytes in size
The size of a pointer variable does not depend on the type of data it is pointing
to. A pointer to an int and a pointer to a char will have the same size, depending on the system architecture.