Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn Pointers | Pointers
C Basics

book
Pointers

Using the reference operator & and the dereference operator *, we can create and work with pointers.

A pointer is a data type, just like int, char, or double. The pointer is designed to store an address, which you can obtain using the & operator. To declare a pointer, prepend it with the * character.

int* intPointer; // pointer to an int variable
double* doublePointer; // pointer to a double variable
char* charPointer; // pointer to a char variable

In essence, a pointer is a variable that holds the address of another object.

int x = 100; // variable
int* pX; // pointer to an int variable
pX = &x; // pX now points to x

Note

Typically, pointers are named by prefixing the letter p to the name of the object they're pointing to.

When you dereference a pointer, you access the value of the variable it points to.

c

Main

copy
#include <stdio.h>

int main()
{
int x = 22543; // variable
int* pX = &x; // `pX` is pointer to `x`

printf("The value of `pX` is %p\n", pX); // value of pointer `pX`
printf("The value of `x` by pointer `pX` is %d\n", *pX); // pointer dereference
return 0;
}
1234567891011121314
#include <stdio.h> int main() { int x = 22543; // variable int* pX = &x; // `pX` is pointer to `x` printf("The value of `pX` is %p\n", pX); // value of pointer `pX` printf("The value of `x` by pointer `pX` is %d\n", *pX); // pointer dereference return 0; }

Note

*(&variable) == *pVariable

If you attempt to dereference a null pointer, the compiler will raise an error:

Example provided to showcase the mistake

c

Main

copy
#include <stdio.h>

int main()
{
int* pX;

printf("x = %p", pX);

return 0;
}
12345678910
#include <stdio.h> int main() { int* pX; printf("x = %p", pX); return 0; }
Task

Swipe to start coding

Determine the size of int and double pointers.

Solution

#include <stdio.h>

// You may use `%d` specifier for `sizeof()` function

int main()
{
int* pInt;
double* pDouble;

printf("Sizeof `int*` = %d, sizeof `double*` = %d\n", sizeof(pInt), sizeof(pDouble));

return 0;
}

Everything was clear?

How can we improve it?

Thanks for your feedback!

Section 6. Chapter 3
#include <stdio.h>

// You may use `%d` specifier

int main()
{
___ pInt;
___ pDouble;

printf("Size of `int*` = %d, size of `double*` = %d\n", ___(pInt), ___(pDouble));

return 0;
}
toggle bottom row
some-alt