指針的值是變量的地址。爲什麼int pointer
的值在int指針增加1後增加了4個字節。爲什麼int指針'++'增加4而不是1?
在我看來,我認爲指針增量後指針(地址變量)的值只增加1個字節。
測試代碼:
int a = 1, *ptr;
ptr = &a;
printf("0x%X\n", ptr);
ptr++;
printf("0x%X\n", ptr);
預期輸出:
0xBF8D63B8
0xBF8D63B9
實際輸出:
0xBF8D63B8
0xBF8D63BC
編輯:
的其他問題 - 如何訪問4個字節一個int
佔用一個接一個?
「你不能增加'void *',因爲'void'是一個不完整的類型」 - true,但是gcc支持'void *'上的算術作爲擴展(它把它看作是'char *')。 – 2016-01-13 18:57:07
「它對於一個整數幾乎總是沒有意義」,但對於像可變長度結構數組這樣的情況來說它是非常有意義的(「我有一個緩衝區充滿了數據包,我想將CurrentPacketPointer移動到下一個包」)。 – 2016-08-15 03:05:54
「如果你真的想移動一個字節,增加一個char *:char的大小總是爲1」不,它不總是一個,你應該使用'uint8_t'來代替。 – Winter 2017-07-17 16:11:07