问题在你反复赋值上,union一次只能给一种类型赋值,按最大类型分配空间,char是一个字节,int是4个字节,所以分配的是4个字节,内容是随机的,你第一次赋值给char,只更新了低位1个字节的内容,这个时候你再读取i,高3个字节内容是不确定的,第2次i赋值了97,高三个字节被清0了,第三次的值来自于第2次清0了高三个字节