C 指標加整數 兩個指標相減的問題

2021-07-04 20:38:51 字數 920 閱讀 8070

考慮如下問題:

1     char a[20];

2     int *ptr = (int *)a;

3     ptr++;

第3句ptr++實際為ptr右移乙個int空間(即4個位元組)的距離,此時ptr指向a[4]。

若第3句改為

int *p = ptr + 2;

則p指向a[8]

這裡說明當指標加整數時,指標向後偏移的距離看的是宣告該指標的型別(此處即int),而非指向的實際型別(此處即char)!!!

另外,如果我就是想在第3句處得到a後面乙個位元組的位址怎麼辦?

可以這樣:

void *p = a;

p = p + 1;

(這裡注意:c++不允許p++或++p)

void型別的指標加整數,即為指標實際向後偏移的位元組數。

同理,若

int *pa0 = (int *)&a[0];

int *pa4 = (int *)&a[4];

std::size_t s = pa4 - pa0;

則s等於1

那麼如果

int *pa3 = (int *)&a[3];

int *pa5 = (int *)&a[5];

std::size_t s2 = pa3 - pa0;

std::size_t s3 = pa5 - pa0;

這裡的s2,s3又分別等於多少呢,

是的,如你所想:s2等於0,s3等於1

可見,同類指標(當然也只有同類指標允許相減,如pa3和pa0)相減得到的整數值,等於兩指標減的距離除以sizeof(宣告指標的型別),然後取整(此處即static_cast((pa3 - pa0) / sizeof(int)))。

C 指標加整數 兩個指標相減的問題

說來慚愧,寫c 有一段時間了。這個問題從來沒有認真考慮過,此次標記於此 考慮如下問題 1 char a 20 2 int ptr int a 3 ptr 第3句ptr 實際為ptr右移乙個int空間 即4個位元組 的距離,此時ptr指向a 4 若第3句改為 int p ptr 2 則p指向a 8 這...

C指標加整數 兩個指標相減的問題

源文是寫c 情況下的,我做測試用的是c,linux環境下。我做的,就是寫下測試程式,來驗證c環境下的結果。原文內容 說來慚愧,寫c 有一段時間了。這個問題從來沒有認真考慮過,此次標記於此 考慮如下問題 1 char a 20 2 int ptr int a 3 ptr 第3句ptr 實際為ptr右移...

兩個指標相減

原文 如果兩個指標指向同乙個陣列,它們就可以相減,其結果為兩個指標之間的元素數目。假設我住在廣場路124號,mag住在廣場路142號,每家之間的位址間距是2 在我這一側用連續的偶數作為街道位址 那麼mag家就在我家往前 142 124 2家,也就是說可以得到我們兩家之間相隔8家。也就是說可以利用兩個...