As mentioned in comments * and & have different semantics depending if they appear in declarations or statements:
- *jDereferences- j
- &jTakes the address of- j
- **jDouble dereferencing a single pointer (Error)
- *&jDereferences the address of- j(equivalent to- j)
- *kDereferences- k(yields another pointer)
- &kTakes the address of- k
- **kDouble dereferences a double pointer (OK)
- *&kDereferences the address of- k(equivalent to- k)
- &*kTakes the address of the dereferenced pointer
See a live demo
Note:
address for j pointer - whats the type of address? (Hexadecimal value)
The hexadecimal value is only used as usual representation for pointers, otherwise these are just numbers / values. Hexadecimal doesn't qualify for a type, it's just a numerical representation.