我正在瀏覽我的教科書,我對那裏的一些代碼有些困惑。在一個部分,他們以下面的方式進行指針運算:void *與char *指針算術
void* bp;
...
bp = (void*)((char*)(bp)+16);
...
但後來,他們做到以下幾點:
void* bp;
...
bp = bp+16;
...
我覺得他們應該是兩個不同的東西,但他們治療它就像是一樣的東西。 我有這樣的感覺,因爲,例如,如果你是做一個陣列連接(整型數組爲例),你會做以下
int* a = malloc(n*sizeof(int));
...
q = *(a+1);
...
在這種情況下
,不是我訪問下一整數數組中有4個字節,而不是下一個字節? 同樣,我覺得如果我有void * a,那麼*(a + 1)應該是接下來的4個字節... 或者是不是這種情況? 謝謝。
第二個例子不應該編譯。 – 2012-04-07 20:48:32
@OliCharlesworth:如果在合規模式下編譯,它將不會編譯(或至少會觸發警告)。默認情況下,gcc不符合要求,並將'void *'算術作爲擴展。 – 2012-04-07 20:54:00