2015-11-19 50 views
1

我正在學習有關斯坦福的c範式。 https://youtu.be/H4MQXBF6FN4?t=1762爲什麼不把這段代碼放下來並更改數組值?

教授展示了這段代碼,並說它會改變數組的位模式。

短褲是2字節和英特爾是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; 
} 
+0

重新標記覆蓋128。這是C++。 – zubergu

+4

取決於Windows上的intel x86處理器(bigendian或littel endian) – pm100

+0

。 – runners3431

回答

0

您的int可能是64位,所以第二個賦值不會命中目標。

教授假設32位整數。

嘗試打印sizeof(int)和sizeof(short)。

編輯: 作爲iMoses所述發生這種情況,因爲2 16位值上小端CPU

+0

的大小是4字節 – runners3431

+1

這與int大小無關。儘管int的大小沒有在C++中明確定義(除了我現在不記得的下限外) - 即使在64位平臺上它通常也是32位長。教授一定使用了一個大型的CPU。 –

+0

@ runners3431和sizeof(短)? –