Does the expression "&number" returns a type int*?
Meaning the address is a pointer to an int?
Since it can be dereferenced *(&number) to return value of number?
In C/C++, a pointer can be typed, so that the type of the pointer reflects what the pointer is pointing to. For example, an int* pointer is pointing to an int value (or to an int[] array).
There also are untypedvoid* pointers that have no information on what they are pointing to.
int number = 5;
int *ptr = &number; // <-- create pointer to number
printf("%p\n", ptr); // <-- print the pointer (i.e. the *address* of 'number')
printf("%d\n", *ptr); // <-- print the int value that ptr is pointing to
number = 42; // <-- change the number
printf("%d\n", *ptr); // <-- print the int value that ptr is pointing to (again)
*ptr = 666; // <-- change the int value via the pointer
printf("%d\n", number); // <-- print the updated int value