강좌에 디바이스 드라이버중 DIO부분에서

addr = (unsigned char *)(IO_SAMPLE_BASE + IO_SAMPLE_READ_OFFSET);

이런부분이 있던데..
그리고 char형을 썻는데....*addr이 char형이라 같은 형을 마춰준건가요?
char형은 고정되어있는건지요..
16bit로 data를 읽고 싶으면
*addr부분과 addr=(unsigned XXXX *) 이 두부분을 모두 바꿔줘야 하나요?
int로 선언하면 4byte만큼 참조하겠다는 소리인가요?.

그리고 IO_SAMPLE_READ_OFFSET 은 2값이고
IO_SAMPLE_WRITE_OFFSET 값은 0이던데..
왜 같은 값을 써주지 않고 이런값이 나오는지 이해가 안되네요..

초보의 질문이지만 답변부탁드립니다.