是不是對指標的任何運算都是合法的呢?答案是它可以執行某些運算,但並非所有的運算都合法。除了加法運算之外,你還可以對指標執行一些其他運算,但並不是很多。
指標加上乙個整數的結果是另乙個指標。問題是,它指向**?如果你將乙個字元指標加1,運算結果產生的指標指向記憶體中的下乙個字元。float佔據的記憶體空間不止1個位元組,如果你將乙個指向float的指標加1,將會發生什麼?它會不會指向該float值內部的某個位元組呢?
答案是否定的。當乙個指標和乙個整數量進行算術運算時,整數在執行加法運算前始終會根據合適的大小進行調整。這個「合適的大小」就是指標所指向型別的大小,「調整」就是把整數值和「合適的大小」相乘。為了更好的說明,試想在某台機器上,float佔據4個位元組。在計算float型指標加3的表示式時候,這個3將根據float型別的大小(此例中為4)進行調整(相乘),這樣實際上加到指標上的整型值為12。
把3與指標相加使指標的值增加3個float的大小,而不是3個位元組。這個行為較之獲得乙個指向乙個float值內部某個位置的指標更為合理。下表包含了一些加法運算的例子。調整的美感在於指標演算法並不依賴於指標的型別。換句話說,如果p是個指向float的指標,那麼p+1就指向下乙個float,其他型別也是如此。
1.算術運算
c的指標的算術運算只侷限於兩種形式。第一種形式是: 指標+-整數 標準定義這種形式只能用於指向陣列中某個元素的指標,如圖所示:
並且這類表示式的結果型別也是指標。這種形式也適用於使用malloc函式動態分配獲得的記憶體。
對乙個指標加1使它指向陣列中的下乙個元素,加5使它向右移動5個元素的位置,依次類推。把乙個指標減去3使它向左移動3個元素的位置。
第二種型別的指標運算具有如下的形式: 指標—指標
只有當兩個指標都指向同乙個陣列中的元素時,才允許從乙個指標減去另乙個指標,如下所示:
兩個指標相減的結果的型別是ptrdiff_t,它是一種有符合整數型別。減法運算的值是兩個指標在記憶體中的距離(以陣列元素的長度為單位,而不是以位元組為單位),因為減法運算的結果將除以陣列元素型別的長度。
如果兩個指標所指向的不是同乙個陣列中的元素,那麼它們之間相減的結果是未定義的。程式設計師無從知道兩個陣列在記憶體中的相對位置,如果不知道這一點,兩個指標之間的距離就毫無意義。
2.關係運算
: >= 不過前提是它們都指向同乙個陣列中的元素。根據你所使用的操作符,比較表示式將告訴你哪個指標指向陣列中更前或更後的元素。標準並未定義如果兩個任意的指標進行比較會產生什麼結果。
指標運算 算術運算 關係運算
是不是對指標的任何運算都是合法的呢?答案是它可以執行某些運算,但並非所有的運算都合法。除了加法運算之外,你還可以對指標執行一些其他運算,但並不是很多。指標加上乙個整數的結果是另乙個指標。問題是,它指向 如果你將乙個字元指標加1,運算結果產生的指標指向記憶體中的下乙個字元。float佔據的記憶體空間不...
指標運算 算術運算 關係運算
c c 允許將指標和整數進行相加操作,加1的結果就是等於原來的位址值加上指向物件占用的位元組數 如 int p int malloc sizeof int 5 p 1 表示p指向記憶體位址加4個位元組 兩個指標如果指向同乙個陣列,則兩個指標進行算術運算才有意義,即 int p int malloc ...
6 畫素運算 算術運算和邏輯運算
倆張進行算術運算的前提是倆張的大小是一樣的。引數說明 src1,src2 需要相加的兩副大小和通道數相等的影象或一副影象和乙個標量 標量即單一的數值 dst 可選引數,輸出結果儲存的變數,預設值為none,如果為非none,輸出影象儲存到dst對應實參中,其大小和通道數與輸入影象相同,影象的深度 即...