指標的加減法及附加思考

2021-09-11 07:16:29 字數 1696 閱讀 1089

指標的加減法

指標可以加減任意乙個整形資料,運算規則為:

指標+n:加n個單元格(加nsizeof(對應指標去除乙個星號)個位元組)

指標-n:減n個單元格(減nsizeof(對應指標去除乙個星號)個位元組)

加減單元格很好懂,位址的變化可能有些複雜,其實舉個例子理解起來就能簡單很多

先給指標變數p初始化乙個位址,然後對其進行各種資料形式的轉換再加減幾個數。

輸出結果為:

第乙個p-2,就是位址減兩個int型的大小,也就是8,結果就是1000-8=992,之後的幾個演算法類似。

第四個計算的是乙個**指標的運算,根據法則是要減去2sizeof(對應指標去除乙個號)個位元組,去除乙個星號還是乙個指標變數,其大小在32位作業系統中是4位元組,在64位作業系統中是8位元組,根據作業系統的不同結果也不同。

指標與指標可以相減但不可以相加

指標-指標:表示為間隔的單元個數(可正可負)

步驟為:1、算出位元組數,2、除以sizeof(指標去掉乙個*)

也具個類似的例子

結果是:

比如第乙個printf語句裡的指標減法,這兩個整形指標的位址是確定的,他們相差(9-1)*4=32個位元組,進行指標減法時,用相差得位元組數除以int型資料的大小,也就是四個位元組,得出結果為-8。之後的幾個算式,兩個指標的位址時不變的,都相差32個位元組,只是除以的資料大小改變。

以上時指標的加減運算。

我們發現指標的加減運算是以單元格為單位的,不同的型別的資料進行加減的時單元格的大小改變,但都是以單元格為單位。

但若給指標以位元組為單位,進行加減會出現什麼情況呢?

比如這樣:

給這個指標加乙個位元組,然後改變它的值會變成什麼樣子呢?

會輸出乙個10乙個20麼?

結果如下:

輸出了5130和0

下面我們從資料在計算機中的儲存形式來**出現這個結果的原因

這個陣列arr[1,2]在計算機中儲存的形式如下(乙個格仔時乙個位元組,考慮計算機是小端,小位址對應低位置,圖示為十六進製制)

此時指標指向01的小格仔(這乙個位元組)進行賦值後變為:

進行加一位元組,指標指向0a旁的乙個格仔(位元組),進行賦值後變為(int型指標一次為四個位元組的賦值)

這時候我們對其進行運算遍可得到5130和0的結果。

指標加減法,

以下 列印的結果是 假設執行在i386系列計算機上 120 struct st t int status short pdata char errstr 32 struct st t st 16 char p char st 2 errstr 32 printf d p char st 分析 先說結...

向量加減法首尾規律 向量的加減法

求兩個向量的和向量的運算叫做向量的加法 法則 三角形法則 平行四邊形法則 運算律 交換律 結合律 向量的減法 向量的加法和減法互為逆運算 已知兩個向量的和及其中乙個向量,求另乙個向量的運 算叫做向量的減法 差向量 向量 加上的相反向量,叫做 與的差 向量 求差向量的方法 向量減法的三角形法則,即減向...

好用的時間加減法

哇塞,找到乙個超級好用的關於時間的加減演算法等。大部分的時間加減是這樣寫的 date date newdate calendar cal calendar.getinstance cal.settime date 設定開始時間 cal.add calendar.year 增加一年的時間 date e...