C allows a single memory location to have multiple aliases. You can declare several pointers and have them all reference the same variable. This isn’t just a quirk of the language. It’s a fundamental feature that changes how you manage memory and data access.
Consider this scenario. You need several handles to the same integer variable. You can declare them all and link them up instantly.
In this block, p, q, and r are all integer pointers. They all point to i. The assignment r = p doesn’t copy the value of i. It copies the address stored in p. Since p holds the address of i, r now also holds the address of i.
One Variable, Many Names
After execution, there is one integer variable i in memory. But there are four ways to refer to that exact data.
i: The original variable name.*p: The value at the address inp.*q: The value at the address inq.*r: The value at the address inr.
They are identical. Change i. *p changes. Change *q. i changes. The data lives at one address. The pointers are just labels.
There is no hard limit on how many pointers can hold the same address. You can chain them indefinitely. a = &i; b = a; c = b; d = c; works the same way. Each assignment copies the pointer value. It does not create a new copy of the data.
“Any number of pointers can point to the same address.”
This capability is powerful for passing references around functions or building linked structures. It keeps your memory usage tight. It also introduces a risk. If you dereference one of these pointers, you touch the same underlying byte. Mistakes in one alias ripple to all of them. But when used correctly, this feature is standard C practice.




























