Hands-on C: Understanding Pointers step by step

Quick Intro

Pointers have always been the most confusing aspect of C for new learners.

As a former lecturer, I find simple hands-on examples are the best to get one started.

In this article, I will explain the following:

  • What a pointer is
  • How a pointer is declared in C
  • How to assign a memory address to a pointer
  • How to change values using pointers
  • How to move pointer to a different memory address

What is a pointer?

It's literally a variable that stores and point to the memory address of another variable.

Don't worry, it should be clear once we go through some examples.

How a pointer is declared in C

How to assign a memory address to a pointer

Now, imagine there's a variable x like this:

The &x just means we're assigning to p the memory address of x:

In order to retrieve the value 5 from p, we also need to use *p because p (without *) retrieves the memory address of x and *p goes after the value stored in the memory's address.

Here's the proof:

Notice that C understands that adding & in front of variable retrieves its memory address.

How to retrieve pointer's value

Retrieving pointer's is also known as dereferencing pointer.

If we change *p we also change x.

We can also assign the value that *p points to a different variable too (effectively changing the value of x):

How to change values using pointers

When we point a pointer to an array, it will point to the memory address of array's first item at index 0:

The pointer behaves in the same way as if were making the changes to the array:

How to move pointer to a different memory address

In this example, I pointed p to A's memory address and then pointed p to n's memory address and that's fine:

Let's uncomment last line so we can see that we can't do the same with arrays, i.e. re-assigning values:

Hope that clarifies a bit of the mystery behind pointers.

Published Feb 20, 2020
Version 1.0

Was this article helpful?

2 Comments

  • Nice work, Rodrigo! It's been since 1996 since I've dealt directly with C on a consistent basis, so it was nice to revisit an old friend. It also led me to investigate why python (my personal fave) doesn't really have pointers, and this article on Real Python does a great job showing the differences between C and python architecture, why pointers aren't really necessary in python, and of course ways to simulate or engage with pointers if you really must.

  • Yeah, C is the old school thing that never gets outdated. I liked the last bit about emulating pointers in Python. Thanks for sharing that, Jason!