>>965
たびたびお騒がせしております
本日もたりない頭を絞ってみました

>*cp = i;

4byte分(int i)の値を、1byte分(char cp)確保されている
場所へコピーしようとするが、賢いコンパイラが
余った3byte分を破棄してくれて、
意図しない結果になるがメモリ破壊は起こらない。

>memcpy( cp, &i, sizeof(int) );

変数iの値が確保されているアドレス(&i)を先頭として、
4byte分(=sizeof(int))の内容をを変数cpが指し示す
アドレスから4byte分の領域へ無理矢理コピーする。
が、cpはchar型なので本当は1byte分しか
メモリ領域が確保されていない為メモリ破壊が起こる。

ここまでは、よかでしょうか?

で、キャストというのはmemcpyと同じように無理矢理
内容をコピーしてしまうために >>962 さんがおっしゃる状況になる。
こんな理解でよろしいでしょうか?