當(dāng)前位置:博客首頁>>編程基礎(chǔ) >> 閱讀正文

【C++】遞增遞減操作符與指針的關(guān)系

作者: 鄭曉 分類: 編程基礎(chǔ) 發(fā)布于: 2012-11-10 23:28 瀏覽:8,235 評論(2)


可以將遞增與遞減操作符用于指針和基本變量,將遞增操作符用于指針時,將把指針的值增加其指向的數(shù)據(jù)類型占用的字節(jié)數(shù),這種規(guī)則適用于對指針遞增和遞減。

int arr[5] = {21,32,23,45,37};

int *pt = arr; //這里的pt指向數(shù)組第一個值,即arr[0]的位置

++pt;//pt向前移動一位,指向了arr[1]的位置

也可以結(jié)合使用這些操作符和*操作符來修改指針指向的值。將*和++同時用于指針時提出了這樣的問題,將什么解除引用,將什么遞增。這取決于操作位置和優(yōu)先級。前綴遞增、前綴遞減和解除引用操作符的優(yōu)先級是相同的,以從右到左的方式依次進(jìn)行結(jié)合。后綴遞增、后綴遞減的優(yōu)先級是相同的,但它們比前綴操作符的優(yōu)先級高,這兩個操作符以從左到右的方式進(jìn)行結(jié)合。

前綴操作符的從右到左結(jié)合規(guī)則意味著*++pt的含義如下:現(xiàn)將++應(yīng)用于pt,因?yàn)?+位于*的右邊,然后將*應(yīng)用于被遞增后的pt。

另一方面,++*pt意味著先取得pt指向的值,然后將這個值加1。

在這種情況下,pt仍然指向array[2]。接著請看下面的組合:

(*pt)++;

圓括號指出,首先對指針解除引用,得到24,然后,操作符++將這個值遞增到25,pt仍然指向25。最后,再看看下面的組合:

*pt++;

后綴操作符++的優(yōu)先級更高,這意味著將操作符用于pt,而不是*pt,因此對指針遞增。然而呢,后綴操作符意味著將對原來的地址(&array[2])而不是遞增后的新地址解除引用,因此,*pt++的值應(yīng)為array[2],即25,但該語句執(zhí)行完畢后,pt的值將為array[3]的地址。

指針遞增和遞減遵循指針?biāo)阈g(shù)規(guī)則,因此,如果pt指向某個數(shù)組的第一個元素,++pt將修改pt,使之指向第二個元素。

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。

本文永久鏈接: http://yjfs.org.cn/c-pointer-ascending-descending.html

【C++】遞增遞減操作符與指針的關(guān)系:目前有2 條留言

用戶評論頭像 蔡佳博客發(fā)表于 2012年11月13日 17:56[回復(fù)]

我又來了一趟沒結(jié)果還是不更新啊。

    用戶評論頭像 鄭曉發(fā)表于 2012年11月13日 18:47[回復(fù)]

    現(xiàn)在不一定每天更新,可能兩天更新 :mrgreen:

發(fā)表評論

change vcode