53-C++遞增/遞減運算符和指針

可以將遞增運算符用於指針和基本變量。前面介紹過,將遞增運算符用於指針時,將把指針的值增加其指向的數據類型佔用的字節數,這種規則適用於對指針遞增和遞減:

double arr[5] = { 21.2,32.8 , 23.4 , 45.2 , 37.4};

double *pt = arr;

++pt;

也可以結合使用這些運算符和*運算符來修改指針指向的值。將*和++同時用於指針時提出了這樣的問題:將什麼解除引用,將什麼遞增。這取決於運算符的位置和優先級。前綴遞增、前綴遞減和解除引用運算符的優先級相同,以從右到左的方式進行結合。後綴遞增和後綴遞減的優先級相同,但比前綴運算符的優先級高,這兩個運算符以從左到右的方式進行結合。

前綴運算符的從右到左結合規則也爲這*++pt的含義如下:先將++應用於pt(因爲++位於*的右邊),然後將*應用於被遞增後的pt。

double x = *++pt;

另一方面,++*pt意味着先取得pt指向的值,然後將這個值加1:

++*pt;

在這種情況下,pt仍然指向arr[2]。

接下來,請看下面的組合:

(*pt)++;

圓括號指出,首先對指針解除引用,得到24.4。然後,運算符++將這個值遞增到25.4,pt仍然指向arr[2]。

最後,來看看下面的組合:

x = *pt++;

後綴運算符++的優先級更高,這意味着將運算符用於pt,而不是*pt,因此對指針遞增。然後後綴運算符意味着將對原來的地址(&arr[2])遞增而不是遞增後的新地址解除引用,因此*pt++的值爲arr[2],即25.4。但該語句執行完畢後,pt的值將爲arr[3]的地址。

注意:指針遞增和遞減遵循指針算術規則。因此,如果pt執行某個數組的第一個元素,++pt將修改pt,使之指向第二個元素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章