char c; int i; char*cp = &c;
で、
*c = i;       なら、cで表現できないデータが失われるかも、ってだけ。
*(int*)c = i; なら、メモリ破壊。
この違いがおわかりか?