解释一下代码要详细 不懂

img

img


short* p = (short*)arr; //p指向数组a的首地址
因为arr是int类型数组,而p是short类型指针,所以用(short*)强制转换

for(i=0;i<4;i++)
{
    *(p+i) = 0; //这里,将p后面的4个元素赋值为0;
    注意,p是short类型的指针,指向的arr数组,short类型占2个字节,int类型占4个字节
    所以,给p后面的4个元素赋值,实际相当于给arr的前两个元素赋值为0(因为数组的元素内存地址是连续的)
}
for循环结束后,arr的数据就是{0,0,3,4,5};

for(i=0;i<5;i++)
{
    printf("%d ",ar[i]); 
}
这个for循环输出数组arr的所有元素

short类型的指针p通过强转指向了数组arr, 然后通过指针间接修改了数组的内容,最后打印的数组元素值应该是部分为0。因为short类型的指针+1只能移动两个字节,而int类型有4个字节