m0_62995941
2021-10-14 23:40
采纳率: 0%
浏览 18

解释一下代码要详细 不懂

img

图片转代码服务由CSDN问答提供 功能建议

     无标图
                      AA
         里楚大小
         硬转
#include<stdio.h>
intmain()
     intarr[]=f1,2,3,4,5
     short*p=(short*)arr
     inti=;
     for(i=0;<4i++)
          (p+i)=0;
     3
     for(i=0;i<5;i++)
          printf(%d“anr[il)
     return;
                                  需要源码
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • img

    打赏 评论
  • qfl_sdu 2021-10-14 23:50
    
    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个字节

    打赏 评论

相关推荐 更多相似问题