C語言 指標的關係運算與邏輯運算

2021-09-26 04:36:50 字數 1747 閱讀 2948

今天遇到乙個有趣的問題

…if(rear->link&&rear->link->expon>e)

…使用使用關係運算子判斷指標是否為空。

是不是對指標的任何運算都是合法的呢?答案是它可以執行某些運算,但並非所有的運算都合法。除了加法運算之外,你還可以對指標執行一些其他運算,但並不是很多。

指標加上乙個整數的結果是另乙個指標。問題是,它指向**?如果你將乙個字元指標加1,運算結果產生的指標指向記憶體中的下乙個字元。float佔據的記憶體空間不止1個位元組,如果你將乙個指向float的指標加1,將會發生什麼?它會不會指向該float值內部的某個位元組呢?

答案是否定的。當乙個指標和乙個整數量進行算術運算時,整數在執行加法運算前始終會根據合適的大小進行調整。這個「合適的大小」就是指標所指向型別的大小,「調整」就是把整數值和「合適的大小」相乘。為了更好的說明,試想在某台機器上,float佔據4個位元組。在計算float型指標加3的表示式時候,這個3將根據float型別的大小(此例中為4)進行調整(相乘),這樣實際上加到指標上的整型值為12。

把3與指標相加使指標的值增加3個float的大小,而不是3個位元組。這個行為較之獲得乙個指向乙個float值內部某個位置的指標更為合理。下表包含了一些加法運算的例子。調整的美感在於指標演算法並不依賴於指標的型別。換句話說,如果p是個指向float的指標,那麼p+1就指向下乙個float,其他型別也是如此。

c的指標的算術運算只侷限於兩種形式。第一種形式是: 指標±整數 標準定義這種形式只能用於指向陣列中某個元素的指標,如圖所示:

並且這類表示式的結果型別也是指標。這種形式也適用於使用malloc函式動態分配獲得的記憶體。

對乙個指標加1使它指向陣列中的下乙個元素,加5使它向右移動5個元素的位置,依次類推。把乙個指標減去3使它向左移動3個元素的位置。

第二種型別的指標運算具有如下的形式: 指標—指標

只有當兩個指標都指向同乙個陣列中的元素時,才允許從乙個指標減去另乙個指標,如下所示:

兩個指標相減的結果的型別是ptrdiff_t,它是一種有符號整數型別。減法運算的值是兩個指標在記憶體中的距離(以陣列元素的長度為單位,而不是以位元組為單位),因為減法運算的結果將除以陣列元素型別的長度。

**如果兩個指標所指向的不是同乙個陣列中的元素,那麼它們之間相減的結果是未定義的。**程式設計師無從知道兩個陣列在記憶體中的相對位置,如果不知道這一點,兩個指標之間的距離就毫無意義。

關係運算:< <= > >=不過前提是它們都指向同乙個陣列中的元素。根據你所使用的操作符,比較表示式將告訴你哪個指標指向陣列中更前或更後的元素。標準並未定義如果兩個任意的指標進行比較會產生什麼結果。

關係與邏輯運算

在執行關係及邏輯運算時,matlab 將輸入的不為零的數值都視為真 true 而為零的數值則視為否 false 運算的輸出值將判斷為真者以 1表示 而判斷為否者以 0 表示。matlab 提供以下的關係判斷及邏輯的運算 元 符號 關係的意義 code 小於 小於等於 大於 大於等於 等於 不等於 邏...

2 7關係運算與邏輯運算

1 關係運算 matlab提供了6種關係運算子 關係運算子的運算法則如下 1 當兩個標量相比較時,直接比較兩數的大小。若關係成立,關係表示式結果為1,否則為0。2 當乙個標量與乙個矩陣相比較時,則把標量與矩陣的每乙個元素按標量關係運算規則逐個比較,並給出元素比較結果。最終關係運算的結果是乙個維數與原...

算術運算 關係運算與邏輯運算的區別

算術運算簡稱運算。指按照規定的法則和順序對式題或算式進行運算,並求出結果的過程。包括 加法 減法 乘法 除法 乘方 開方等幾種運算形式。其中加減為一級運算,乘除為二級運算,乘方 開方為 運算。在一道算式中,如果有幾級運算存在,則應先進行高階運算,再進行低一級的運算。如 3 22 4 3 4 4 3 ...