【C语言】错题1.

判断下面代码输出什么结果

#include 
int main()
{
  int arr[] = {1,2,3,4,5};
  short *p = (short*)arr;
  int i = 0;
  for(i=0; i<4; i++)
  {
    *(p+i) = 0;
  }
   
  for(i=0; i<5; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

arr数组在内存中的存储形式是

0x00ECFBF4: 01 00 00 00

0x00ECFBF8: 02 00 00 00

0x00ECFBFC: 03 00 00 00

0x00ECFC00: 04 00 00 00

0x00ECFC04: 05 00 00 00

此时指针是short型的,每加1向后移动两个字节,for循环第一次short类型指针变量p+1,只改变 0x00ECFBF4 处的 01 00两个字节,第二次循环改变0x00ECFBF4处的 00 00两字节,第三次循环改变0x00ECFBF8 处 02 00 两个字节,第四次循环改变0x00ECFBF8处 00 00两个字节。

改变后存储为:

0x00ECFBF4: 00 00 00 00

0x00ECFBF8: 00 00 00 00

0x00ECFBFC: 03 00 00 00

0x00ECFC00: 04 00 00 00

0x00ECFC04: 05 00 00 00

故输出值为 0 0 3 4 5

 
  

你可能感兴趣的:(c语言,c++)