关于char数组强制转换成short int 类型后,输出有关问题

关于char数组强制转换成short int 类型后,输出问题

int _tmain(int argc, _TCHAR* argv[])
{
char data[200];
for(int i = 0; i < 200; i++ )
{
data[i] = i + 1;
}
short int *p;
short int j;
p = (short int*)data;
for(j = 0; j < 100; j++)
{
*(p++) &= 0xff;
}
for (j = 0; j < 100; j++)
{
printf("%-4d\n",data[j]);
}
return 0;
}


这个输出结果比较怪,求解释
------解决方案--------------------
2L已经把我要说的都说了,你的char数组内存是连续的,因为short占的内存空间比char大,你将数组中的char元素强制转换为short,再写入新值,会覆盖数组其他元素,最糟糕的情况是溢出。
你应该这样

    for(j = 0; j < 100; j++)
    {
        short int p = data[j];
        p &= 0xff;
        data[j] = p; // 在short为2个字节,char为1个字节的情况下,高字节被清0了
    }