Dereferencing pointers in C and assembly