2016-12-08 75 views

回答

2

給定一個32位的2的補碼系統中,可變a可以存儲在通過以下方式(十六進制):

02 01 00 00 // little endian, or 
00 00 01 02 // big endian 

你點在此整數的第一個字節,然後增加1指針。在一個小端系統中,您現在將指向值01,在一個大端系統上,您現在將指向值00

看起來你有一個小端系統,因爲你將值01更改爲02並導致內存看起來像02 02 00 00。這個翻譯爲十進制數會給你514

0

假設你是一個小端系統上工作:

int a = 258 

它代表一個十六進制4字節數,0x00000102

char *b = &a; 

做一個指向一個字節大小的數據類型,所以它只指向最後一個0x02

b++; 

將指針1個字節,現在它指向0×01

*b = 2; 

更改您的int從地址0x01爲0x02 現在你有a

a = 0x00000202 = 514 
+1

此答案假定整數存儲在[little endian](https:/ /en.wikipedia.org/wiki/Endianness)符號(這可能**是海報計算機上的實際字節順序,只要它們得到結果)。 – axiac

2

覺得作爲數組第二個字節字節(char)與sizeof(int)元素。

隨着

char *b = &a; 

你讓b指向此數組中的第一個元素。

然後你做b++這使得b指向第二個元素。然後給第二個元素賦值,這會修改a的值。

另請注意,結果取決於您的系統的字節順序上的

5

258看起來像00000000 00000000 00000001 00000010(在小端)。

然後您將b指向00000010的「第一個char」。

現在你增加b,因爲它是char型的,現在進入下一尋址char這是00000001(以下簡稱「第二」元素),然後將其更改爲2這是00000010

所以現在我們有00000000 00000000 00000010 00000010這是514當作爲int閱讀。

這個結果並不能保證,儘管在big-endian上結果會有所不同。

+2

這個答案假定整數存儲在[little endian](https://en.wikipedia.org/wiki/Endianness)表示法中(這可能是**是發佈者計算機上的實際字節順序,給出結果他們得到)。 – axiac

+1

[C++ *「proof」*](http://melpon.org/wandbox/permlink/FQhUdebvexmt5PkO) –

+1

@axiac是的,我已經補充說明了,謝謝。 –

0
int a = 258; 

假設int是4個字節長在你的機器,它會被存儲爲

00000000 00000000 00000001 00000010 

當你這樣做char *b = &a;,B將指向從右邊的第一個字節是00000010

當你做b++;時,假設你的機器中char是1個字節,b值加1,現在它指向右邊第二個字節,即00000001.

現在你做*b =2;。所以第二個字節將變成00000010

所以,如果你看到,a,它會是這樣的。

00000000 00000000 00000010 00000010 

哪個是512

-1

整數型「B」變量的第二個字節將被增加作爲變量是字符類型的。您的答案將更改爲514

相關問題