I am a beginner of computer science. I have learned that a pointer is a compound data type, which indicates the address of a data and the data's type and size. Type conversion of a pointer only change the read size but the start address. To confirm it, I made an experiment.
See the code below. I changed the pointer type of variable 'sample', but I think it still point the first byte of sample. Nothing changed but the size. Then I make the (char type) pointer jump left a byte(That is "p = p-1" in the code). After that, I convert it back to a short type. I think the pointed data is 0x..24(.. means data in front of 0x2456). Finally, I use bit operation "<<" to change to 0x2400. However, I got random numbers every time I run it.
#include<stdio.h>
int main(void){
short sample = 0x2456;
char *p = (char*) &sample;
p = p-1;
printf("%d\n",*((short*)p)<<8 );
return 0;
}