代碼改變短變量的值:使用字符指針
int main(){
short a=1; // #1
char *p=(char*)&a;
*(p)=1; // #2
cout << a << endl; // Output: 1
*(p+1)=2; // #3
cout << a << endl; // Output: 513
}
從我的理解,輸出應如下面的圖所示,257和258然後
是否有任何當我運行上述程序時,我獲得了不同的結果嗎?
更新: 我知道,這是不確定的行爲,不過,這是否意味着十進制到二進制轉換尚未完成像往常一樣:從右到左的,而是做左至右例如:
binary(a)=1000 0000 | 0000 0000
所以*(p)=1;
會讓binary(a)=1000 0000 | 0000 0000
這是十進制
和將使binary(a)=1000 0000 | 0100 0000
這是513
這正是程序的輸出。
HTTP:// EN。 wikipedia.org/wiki/Endianness –
@BenjaminLindley而http://en.wikipedia.org/wiki/Undefined_behavior – 2012-12-08 20:01:42
簡單地說,這些字節(可能)切換。你不能確定未定義的行爲,但最有可能的。考慮到這一點,您實際上將左邊的字節設置爲2,將右邊的字符設置爲1(256 * 2 + 1 = 513)。 – chris