数组操作(访问特定字节)

时间:2015-04-07 19:16:09

标签: c arrays

我看了一个关于阵列的视频讲座,讲师说了

的输出结果
int arr[5];
arr[3}=128;
((short *)arr)[6]=2;
cout << arr[3] << endl;

将是512 + 128。我在我的文本编辑器上实现了代码,但是在编译并运行它之后,输出是2.我的疑问是我的代码是不正确的还是教师在某种程度上是错误的(或者我是否误解了某些方面)。

我的代码:

#include <stdio.h>
int main(){
int array[5];
array[3]=128;
((short*)array)[6]=2;
printf("%d\n", array[3]);
return 0;
}

1 个答案:

答案 0 :(得分:3)

  

讲师说[这段代码片段]的输出结果是512 + 128

讲师应该提到其他一些事情,以使上述事实成真:

  • 结果取决于硬件,即big endian
  • 结果取决于使用特定的C编译器,具有16位int和8位short s。

否则,结果将不会相同。

  

我怀疑的是,如果我的代码不正确或教师是否有些错误

教师是对的,你的代码是正确的,但是你在不同的平台上运行这段代码。

您应该从这个实验中学到的主要教训是,这样的代码基本上是不可移植的。如果您希望将其设为便携式,请使用stdint.h中的类型以避免大小调整问题,并使用位操作而不是部分写入来避免字节序问题。