c語言中 *p++ 和 (*p)++ 有什麼區別?以及C語言運算子的優先順序。整理。

Jzeng666發表於2018-07-10

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

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

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

int x,y,a[]={1,2,3,4,5},*p=a,*q=a;

x=*p++;//執行這一句後x=a[0]=1,p=a+1

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

每當想找哪個運算子優先順序高時,很多時候總是想找的就沒有,真讓人氣憤!現在,終於有個我個人覺得非常全的,分享給大家,歡迎閱讀。

                                                                                                    C語言運算子優先順序

優先順序

運算子

名稱或含義

使用形式

結合方向

說明

1

[]

陣列下標

陣列名[常量表示式]

左到右

()

圓括號

(表示式)/函式名(形參表)

.

成員選擇(物件)

物件.成員名

->

成員選擇(指標)

物件指標->成員名

 

2

負號運算子

-表示式

右到左

單目運算子

~

按位取反運算子

~表示式

++

自增運算子

++變數名/變數名++

自減運算子

–變數名/變數名–

*

取值運算子

*指標變數

&

取地址運算子

&變數名

!

邏輯非運算子

!表示式

(型別)

強制型別轉換

(資料型別)表示式

sizeof

長度運算子

sizeof(表示式)

 

3

/

表示式/表示式

左到右

雙目運算子

*

表示式*表示式

%

餘數(取模)

整型表示式%整型表示式

4

+

表示式+表示式

左到右

雙目運算子

表示式-表示式

5

<< 

左移

變數<<表示式

左到右

雙目運算子

>> 

右移

變數>>表示式

 

6

大於

表示式>表示式

左到右

雙目運算子

>=

大於等於

表示式>=表示式

小於

表示式<表示式

<=

小於等於

表示式<=表示式

7

==

等於

表示式==表示式

左到右

雙目運算子

!=

不等於

表示式!= 表示式

 

8

&

按位與

表示式&表示式

左到右

雙目運算子

9

^

按位異或

表示式^表示式

左到右

雙目運算子

10

|

按位或

表示式|表示式

左到右

雙目運算子

11

&&

邏輯與

表示式&&表示式

左到右

雙目運算子

12

||

邏輯或

表示式||表示式

左到右

雙目運算子

 

13

?:

條件運算子

表示式1?

表示式2: 表示式3

右到左

三目運算子

 

14

=

賦值運算子

變數=表示式

右到左

/=

除後賦值

變數/=表示式

*=

乘後賦值

變數*=表示式

%=

取模後賦值

變數%=表示式

+=

加後賦值

變數+=表示式

-=

減後賦值

變數-=表示式

<<=

左移後賦值

變數<<=表示式

>>=

右移後賦值

變數>>=表示式

&=

按位與後賦值

變數&=表示式

^=

按位異或後賦值

變數^=表示式

|=

按位或後賦值

變數|=表示式

 

15

逗號運算子

表示式,表示式,…

左到右

 

說明:

    同一優先順序的運算子,運算次序由結合方向所決定。
    簡單記就是:! > 算術運算子 > 關係運算子 > && > || > 賦值運算子

相關文章