兩個相同型別的指標不能直接相加的原因是編譯器裡面不允許出現這種操作。
不知道說的是什麼語言,指標操作是一個比較複雜的範疇,一定要在這一塊多花點功夫,對後面很有好處的。
1、所有的有效指標都是一個正整數(0可以被用來定義無效指標,小於0的只能叫非法指標),這個值代表了記憶體中的某個地址,記憶體可以理解為一把尺子,上面的刻度就是記憶體的地址,最小刻度一毫米可以理解為那就是一個位元組)。指標的型別定義只是指明瞭他指向的那個地址段是儲存的什麼樣的資料而已,假設是一個4位元組的資料,那麼指標的值只是表示開始位置,後面連續的4個位元組或刻度的地方,都用來放這個資料。
2、兩個型別相同的指標相加毫無意義。比如p1和p2都是型別為int的指標,雖然他們指向的記憶體中儲存了兩個int數N1和N2,但是這兩個數在記憶體中可能挨著,也可以能間隔很遠,甚至有可能是一個地方。假設p1值也就是N1位置起始值為1234,P2為2345,這個時候如果直接相加得到的資料3589有可能已經超出了記憶體最大值或者指向某個無意義的記憶體地址,所以指標相加沒有意義可言。正確的應該是N1和N2相加才是合理的算數運算。
3、指標可以相減,可以和立即數加或減,是有意義的,是允許的。比如我想知道N1和N2之間到底間隔了多少位元組的記憶體,兩者相減就相當於尺子上兩個刻度相減,也就是長度或者寬度了。另外,和立即數的加減主要用來快速定址,比如我有一個數組,起始指標為P0,如果陣列儲存的是一系列INT值,那麼 P0+2*sizeof(int)得到的值就是第三個元素的所在位置的地址,也是一個指標,是有意義的(因為不同的語言和系統,int值每次所佔的位元組數可能不一致,所以使用sizeof函式去求得而不是直接加常規的4)。
4、指標不僅可以指向簡單資料,也可以指向複雜的資料塊或者組合的型別,總之一個型別的指標的值所表示的意義就是這種型別的資料在記憶體中說佔的位置的起點,這只是一個刻度,具體佔多寬要根據具體型別來定。指標的操作最容易犯的錯誤就是:越界、非法指標、指向的資料不是想要的起始位置而是中間位置、指標的值和其指向的值分不清這些。
兩個相同型別的指標不能直接相加的原因是編譯器裡面不允許出現這種操作。
不知道說的是什麼語言,指標操作是一個比較複雜的範疇,一定要在這一塊多花點功夫,對後面很有好處的。
1、所有的有效指標都是一個正整數(0可以被用來定義無效指標,小於0的只能叫非法指標),這個值代表了記憶體中的某個地址,記憶體可以理解為一把尺子,上面的刻度就是記憶體的地址,最小刻度一毫米可以理解為那就是一個位元組)。指標的型別定義只是指明瞭他指向的那個地址段是儲存的什麼樣的資料而已,假設是一個4位元組的資料,那麼指標的值只是表示開始位置,後面連續的4個位元組或刻度的地方,都用來放這個資料。
2、兩個型別相同的指標相加毫無意義。比如p1和p2都是型別為int的指標,雖然他們指向的記憶體中儲存了兩個int數N1和N2,但是這兩個數在記憶體中可能挨著,也可以能間隔很遠,甚至有可能是一個地方。假設p1值也就是N1位置起始值為1234,P2為2345,這個時候如果直接相加得到的資料3589有可能已經超出了記憶體最大值或者指向某個無意義的記憶體地址,所以指標相加沒有意義可言。正確的應該是N1和N2相加才是合理的算數運算。
3、指標可以相減,可以和立即數加或減,是有意義的,是允許的。比如我想知道N1和N2之間到底間隔了多少位元組的記憶體,兩者相減就相當於尺子上兩個刻度相減,也就是長度或者寬度了。另外,和立即數的加減主要用來快速定址,比如我有一個數組,起始指標為P0,如果陣列儲存的是一系列INT值,那麼 P0+2*sizeof(int)得到的值就是第三個元素的所在位置的地址,也是一個指標,是有意義的(因為不同的語言和系統,int值每次所佔的位元組數可能不一致,所以使用sizeof函式去求得而不是直接加常規的4)。
4、指標不僅可以指向簡單資料,也可以指向複雜的資料塊或者組合的型別,總之一個型別的指標的值所表示的意義就是這種型別的資料在記憶體中說佔的位置的起點,這只是一個刻度,具體佔多寬要根據具體型別來定。指標的操作最容易犯的錯誤就是:越界、非法指標、指向的資料不是想要的起始位置而是中間位置、指標的值和其指向的值分不清這些。