Learn what pointers are, how to declare them (`*`), get an address (`&`), and access the value at an address (`*`).
A pointer is a variable that stores the memory address of another variable. Instead of holding a direct value like an integer or a character, it 'points' to the location where that value can be found. This concept of indirect access is fundamental to many advanced features in C. To work with pointers, you need to understand three key operators. First, the **declaration** of a pointer variable is done by placing an asterisk `*` before its name. The data type of the pointer must match the data type of the variable it will point to. For example, `int *p;` declares a pointer `p` that can store the address of an integer variable. Second, the **address-of operator `&`** is a unary operator that returns the memory address of a variable. To make a pointer point to a variable, you assign the address of that variable to the pointer. For example, if you have an integer variable `int var = 10;`, you can make the pointer `p` point to it with the statement `p = &var;`. Now, `p` holds the memory location of `var`. Third, the **dereference operator `*`** (also called the indirection operator) is used to access the value stored at the memory address held by a pointer. Continuing the example, `*p` would evaluate to 10, because it retrieves the value from the address that `p` is pointing to. You can also use the dereference operator to modify the original variable's value indirectly, for instance, `*p = 20;` would change the value of `var` to 20.