2011-02-03 199 views
3

只是一個愚蠢的問題: 我有一個簡單的計數器,但它似乎給出了我期望的雙重價值。int和++新增每次增加2

short int *new = 0; 
++new; 
NSLog(@"Items: %hi", new); 

這將返回:

項目:2

相對較新的可可,和仍在制定的小細節,是上述明確形式......

回答

17

你沒有一個整數變量,你有一個指針到一個整數變量(一個短整數,具體)。它增加2,因爲短整數是兩個字節長。指針變量保存另一個值的內存地址。遞增指針意味着「使該指針指向內存中的下一個事件」,其中「thing」是該指針被聲明指向的值的類型。指向double的指針每次增加8。

聲明中的「*」使其成爲指針。如果你只是想一個int,你只寫

short int new = 0; 
++new; 
+0

+1,當C++編碼,我這樣做太多次>< – 2011-02-03 14:25:42

3

啊哈,當你增加一個指針,以增量它由它持有的對象大小。您正在查看地址,而不是數字。

做到這一點,而看

short int *new = 0; 
NSLog(@"Items now: %hi", new); 
++new; 
NSLog(@"Items then: %hi", new); 
1

因爲你定義new的方式是一個指向整數,*new。您將存儲器位置設置爲包含short int,這是一個16位整數,因此佔用內存中的兩個字節。因此,增加第二行意味着增加內存位置2.

我不認爲你打算處理內存位置。定義一個整數並控制其在內存中的位置有點奇怪,除非在特定情況下。你想要什麼,會做的代碼是:

short int new = 0; 
++new; 
NSLog(@"Items: %hi", new);