C語言中優先順序和結合性例如 p,C語言中左右結合性什麼意思?

2021-03-10 14:47:06 字數 5727 閱讀 9614

1樓:匿名使用者

*p++,由於bai++和*的優先順序相du同,結合方向為自右至左。所zhi以確實*p++等價於

dao*(p++),而p++其實回

取值的時候還是取

答p的,是用過之後才能+1。所以*(p++)就是先執行p++得到p,然後執行*p,得到p指向的值,等這個運算結束了才能+1。你的那個理解應該是對於*(++p)的!

2樓:匿名使用者

前兩天回答過類抄似對問題了。襲

*p++等價於

bai*(p++),其中括號指的是結合du而不是優先zhi運算!

daop++意味著使用p之後再++,因為++在p之後,如果使++p,那麼先讓p加1(使1個長度單位或者步長,因為使陣列元素對長度),再使用p。

所以*p++先取得*p對值參加運算再p++,而*(++p)先p++再取得*p。

3樓:匿名使用者

一。其實

baic指標中【*】的優先順序du等於++(或--),對於這個zhi問題,++或--是字尾,因dao此先進行專【*】運

算,即先運算*p的值,屬在給*p的值+1 。相當於p=&a,*p=a,*p++=a++ !

二。先算當然取決於優先性,當優先順序相同時,按自然順序運算,即【從左至右】,對於本問題,如果先p++,那麼p所指的地址就相應改變,而不指向原值地址

4樓:匿名使用者

先取值後++

就跟a = 3;

b = a++;

而b還是等於3一個道理

5樓:匿名使用者

書中在講解的意思是 ,*p++ 是

c語言中指標運算子*和自增運算子++的優先順序

6樓:慶年工坊

c語言中自增運算子++作為字尾的話比指標運算子*的優先順序高,作為字首的話與指標運算子*平級。

c語言的運算子主要用於構成表示式,同一個符號在不同的表示式中,其作用並不一致。下面按計算的優先順序,分別說明不同作用的表示式。需要特別指出,在c語言標準中,並沒有結合性的說法。

相同優先順序運算子,從左至右依次運算。注意字尾運算優先順序高於字首。因此++i++應解釋為++(i++)。

而與或非的運算優先順序都不一樣,因此a && b || b && c解釋為(a && b)|| (b && c)

合理使用優先順序可以極大簡化表示式。

基本表示式 1級

基本表示式(primary expressions),主要是用於運算子之間,做為運算數。

標識,常量,字串文字量,優先順序提升表示式最優先執行。

優先順序提升表示式是指圓括號包圍的表示式,如「( expression )」

字尾表示式 2級

postfix-expression [ expression ],陣列下標運算。

postfix-expression (argument-expression-list),函式呼叫,括號內的引數可選。

postfix-expression . identifier,成員訪問,

postfix-expression -> identifier,成員訪問,->號之前應為指標。

postfix-expression ++,字尾自增

postfix-expression --,字尾自減

( type-name )

( type-name ) 複合初始化,c99後新增。

單目/一元運算 3級

++ unary-expression 字首自增

-- unary-expression 字首自減

unary-operator cast-expression 單目轉型表式式, 包括 取地址& ,提領 * , 正號+ ,負號- 位反~ 邏輯否!。

sizeof unary-expression 求型別長度,對表示式求型別長度

sizeof ( type-name ) 求型別長度

強制型別表示式 4級

(type-name ) cast-expression,強制表示式成為type-name指定的型別。

乘法表示式 5級

「 * 」 乘法運算子;「 / 」除法運算子;「 % 」 取餘運算子。

加法運算子 6級

「 + 」加法運算子;「 - 」減法運算子。

移位運算子 7級

<< 左移運算子;>> 右移運算子。

關係運算子 8級

<、<=、>、>=關係運算子。

相等運算子 9級

「 == 」等於運算子;「 != 」不等於運算子。

位與運算子 10級

「 & 」按位與運算子

位異或運算子 11級

「 ∧ 」按位異或運算子(bitwiseexclusive or operator)。

位或運算子 12 級

「 | 」按位或運算子(bitwiseinclusive or operator)。

邏輯與運算子 13級

「&&」邏輯與運算子。

邏輯或運算子 14 級

「 || 」邏輯或運算子。

三元條件運算子 15級

? :條件運算子。

賦值運算子 16 級

=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算子。

逗號運算子 17級

「,」逗號運算子。

7樓:小夏在深圳

運算子的優先順序確定表示式中項的組合。這會影響到一個表示式如何計算。某些運算子比其他運算子有更高的優先順序,乘除運算子具有比加減運算子更高的優先順序。

例如 x = 7 + 3 * 2,在這裡,x 被賦值為 13,而不是 20,因為運算子 * 具有比 + 更高的優先順序,所以首先計算乘法 3*2,然後再加上 7。

結合性是指具有相同優先順序的操作符的運算順序,從左至右運算稱為左結合,從右至左運算稱為右結合。

自增(++)和自減(--)操作符為物件加1或減1操作提供了方便簡短的實現方式。它們有前置和後置兩種使用形式。到目前為止,我們已經使用過前自增操作,該操作使其運算元加1,操作結果是修改後的值。

c語言運算子是說明特定操作的符號,它是構造c語言表示式的工具。c語言的運算異常豐富,除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算子處理。

擴充套件資料

運算子優先順序

1、函式計算優先。

2、其次是強制型別轉換。

3、自增、自減和取反次之。

4、先乘除再加減。

5、有括號先算括號內的。

6、表示式中出現連續兩個運算子時最好用空格隔開,如a+++b要寫成:a++ +b或a+ ++b。同一優先順序的運算子,運算次序由結合方向所決定。

8樓:靳大大來了

附錄c c語言運算子優先順序和結合性

優先順序 運算子 含義 運算型別 結合性

1 ( )

[ ]->

, 圓括號

下標運算子

指向結構體成員運算子

結構體成員運算子 單目 自左向右

2 !~

++ --

(型別關鍵字)

+ -*

&sizeof 邏輯非運算子

按位取反運算子

自增、自尖運算子

強制型別轉換

正、負號運算子

指標運算子

地址運算子

長度運算子 單目 自右向左

3 * / % 乘、除、求餘運算子 雙目 自左向右4 + - 加、減運算子 雙目 自左向右

5 <<

>> 左移運算子

右移運算子 雙目 自左向右

6 < <= > >= 小於、大於、小於等於、大於等於 關係 自左向右

7 = = != 等於、不等於 關係 自左向右8 & 按位與運算子 位運算 自左向右

9 ^ 按位異或運算子 位運算 自左向右

10 | 按位或運算子 位運算 自左向右

11 && 邏輯與運算子 位運算 自左向右12 || 邏輯或運算子 位運算 自左向右13 ? : 條件運算子 三目 自右向左

14 = += -= *=

/= %= << = >>= &= ^= |= 賦值運算子 雙目 自右向左

15 , 逗號運算 順序 自左向右

9樓:伊·梵

*p_value++等價於 *(p_value++)

printf("(*p_value)++是%d\n", (*p_value)++);

// 這一行輸出的*p_value的值,也就是4,輸出之後*p_value結果自增為5

printf("*p_value++是%d\n", *p_value++);

// 這一行輸出的*p_value的值,也就是5,輸出之後p_value結果自增

程式沒有亂碼:

10樓:

#include

int main()

自己觀察執行結果就一目

瞭然了。

11樓:草擬大葉

因為指標地址自增之後,列印的是記憶體一塊未分配地區,這塊區域內容無法預知。

而先取值後自增,就是值得自增,不是指標地址自增。

c語言中左右結合性什麼意思?

12樓:

其實很簡單,它就是同優先順序操作符在語句中的「運算優先順序(或叫順序)」。比如12/3*4,/和*是同優先順序操作符,先算12/3呢還是先算3*4呢?由於/和*都是左→右結合的,所以12/3*4就被解釋為(12/3)*4,而不會被解釋為12/(3*4)。

再比如當p是指標時的*p++,由於*和++同級別,它們又是右→左結合的,所以被解釋為*(p++)而不會被解釋為(*p)++。從以上可知,對於不同優先順序的操作符,結合性就起不到什麼作用了。個人理解,僅供參考。

13樓:匿名使用者

對左邊還是右邊的操作物件產生影響。

c語言中*p++和(*p)++有什麼區別?

14樓:慕容冰綃

我看書中解釋:*p++:是先取出*p的值,再使p加1//p是個指標,給p加1,相當於讓p指向了x所在地址的下一個位置,而對於x則是沒有任何影響

(*p)++:是使*p的值加1.

//*p則是p指向的位置對應的值,題目中是*q,所以此時的*q就是x的值,為3,當輸出*q之後,再給*q即x自加1,所以x就變為4

15樓:魔鬼小波的丶

這些人回答的,一群小屁孩蹭經驗的吧?這個題就應該是3,3,4.①printf("%d\n",*p++);p指標地址加一,所以x還是3。

②printf("%d\n",(*q)++);指標內容加一,但是注意是後加加,此時指標輸出的內容還是之前狀態x=3的。③最後printf("%d\n",x);,此時經過②指標內容已被加1,因為這個類似引用,故可指標可改變原來內容,原x也是4;如果你想出現3,4,4的答案第二個應該是++(*q)

16樓:吳帥帥

*p++是指下一個地址。

(*p)++是指將*p所指的資料的值加一。

c編譯器認為*和++是同優先順序操作符,且都是從右至左結合的,所以*p++中的++只作用在p上,和*(p++)意思一樣;在(*p)++中,由於()的優先順序比*和++都高,所以++作用在()內的表示式*p上。比如有:

int x,y,a=,*p=a,*q=a;

x=*p++;//執行這一句後x=a[0]=1,p=a+1y=(*q)++;//執行這一句後,y=a[0]+1=2,q仍然=a

在c語言中,運算子的優先順序的全記?

附錄 運算子和結合性 優先順序 運算子 含義 要求運算物件的個數 結合方法 1 圓括號 下標運算標 指向結構體成員運算子 結構體成員運算子 自左至右 2 型別 sizeof 邏輯非運算子 按位取反運算子 自增運算子 自減運算子 負號運算子 型別轉換運算子 指標運算子 地址與運算子 長度運算子 1 單...

c語言中邏輯運算子的優先順序高於算術運算子

邏輯非 即 操作符 優先順序高於算術運算子。所有的單目操作符優先順序都高於雙目和三目操作符。括號運算子是最高階的運算子。三個邏輯運算子與或非。非的運算子優先順序高於算術運算子。c語言的操作符共有15個優先順序,如下 left toright type sizeof right toleft left...

右結合性是什麼意思,C語言中右結合性和右結合性是什麼意思

右結合性 意思是從右向左執行運算 例如 a b c,按a b c 運算,左結合性 意思是從左向右執行運算 例如 a b c,按 a b c運算 除了賦值運算子外,所有二元運算子都是左結合的 右結合性 是什麼意思?右結合性 就是在c語言中表示式中最右邊的操作最先執行,然後從右到左依次執行。右結合性 讀...