As I said before - your confusion is 100% justified because the C syntax for pointers does not follow 'straigth forward' rules, it is something that you just have to remember. (It will totally make sense to you once you do)
So the star '*' sign is used to do two things (most of the times):
- declare a variable that holds a pointer
- 'resolve' a pointer variable into its value
int num = 100;
int * pt; // here '*' is used to declare a pointer
*pt = num; // here '*' is used to make it so that the value of 'num' is assigned to the VALUE of pt variable
num = *pt; // here '*' is used to resolve the value stored in the pt address
The ampersand '&' sign is used to get values by reference:
int &a = b; // does not assign the same VALUE as 'b' to 'a', but rather points to the location where 'b' is
The main difference between '' and '&' is that pointers () - can be reassigned, while references (&) can not. So in lamens terms - you use a pointer when the variable (or whatever) it is pointing to can be changed. And you use references to point to particular variables and its always gonna be referencing only that particular variable.
Again, in C the syntax for pointers does not follow any 'natural logic' (for a lack of a better term) rules - you'll just have to remember it, but once you get used to them - I am sure you will have 0 problems.