I am still struggling to understand the difference between *p, &p, and p. From my understanding, * can be thought of "value pointed by", and & as "adress of". In other words, * holds the value while & holds the adress. If this is true, then what is the distinction between *p and p? Doesn't p hold the value of something, just like *p?
* operator is used for indirection. Indirection means the value in
p is interpreted as a memory address and the value at that address is loaded.
p is the value of
*p is the value stored in the memory location pointed by
p. When you want to indirectly access the value of an integer
i, you can have an integer pointer point to it (
int *p = &i) and use that pointer to modify the value of
i indirectly (
*p = 10).