兩個指標相減

2021-07-16 07:43:13 字數 809 閱讀 1655

原文:

如果兩個指標指向同乙個陣列,它們就可以相減,其結果為兩個指標之間的元素數目。 

假設我住在廣場路124號,mag住在廣場路142號,每家之間的位址間距是2(在我這一側用連續的偶數作為街道位址),那麼mag家就在我家往前(142-124)/2家,也就是說可以得到我們兩家之間相隔8家。 

也就是說可以利用兩個指向同一陣列的指標相減得到兩個指標之間元素的個數。 

如果兩個指標不是指向同乙個陣列,它們相減就沒有意義了。 

c本身無法防止非法的指標減法運算,它無法為你提出任何警告或提示。 

指標相減的結果是某種整型別的值,為此,ansi c標準標頭檔案中預定義了乙個整型別ptrdiff_t。儘管在不同的編譯程式中ptrdiff_t的型別可能各不相同,但它們都適當地定義了ptrdiff_t型別。 

把指標強制轉換成指向純粹的記憶體位址的指標,通常就是轉換成void*型別,但是在本例中將指標強制轉換成char*型別,因為void*型別的指標之間不能進行減法運算。 

#include #include struct stuff;

struct stuff array=,,,

,,,,

,,

} main()

本例演示了指標的減法運算。該例中有乙個結構體陣列,每個結構體的長度都是16位元組。如果是對指向結構體陣列的指標進行減法運算,則a[0]和a[8]之 間的距離為8,如果將結構體陣列的指標強制轉換成指向純粹的記憶體位址的指標之後再相減,則a[0]和a[8]之間的距離為128。如果將指向a[8]的指 針減去8,該指標所指向的位置並不是往前移了8個位元組,而是往前移了8個陣列元素。

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右移...

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 這裡說明當指標加整數時,指標向後偏移的距離看的是宣告該指標的型別 此處即i...