为什么这段代码没有被抛弃并改变数组值?

时间:2015-11-19 19:25:24

标签: c++

我正在学习斯坦福的c范式。 https://youtu.be/H4MQXBF6FN4?t=1762

教授展示了这段代码并说它会改变数组的位模式。

短裤是2字节,Ints是4字节。

#include <iostream>

int main()
{
    int arr[5];
    arr[3] = 128;     // 0000 0000 1000 0000
    ((short*)arr)[6] = 2;  //  0000 0010

    std::cout << arr[3];  // my compiler prints out 2, should it be 640? should be 512 + 128????   1010000000 would be the bit pattern?


    return 0;
}

1 个答案:

答案 0 :(得分:0)

您的int可能是64位,因此第二次分配不会达到目标。

教授假设32位int。

尝试打印sizeof(int)和sizeof(短)。

编辑: 正如iMoses所说,这是因为16位值为2会覆盖小端CPU上的128