C言語運算符優先級。本站提示廣大學習愛好者:(C言語運算符優先級)文章只能為提供參考,不一定能成為您想要的結果。以下是C言語運算符優先級正文
優先級
運算符
稱號或含義
運用方式
結合方向
闡明
1
[]
數組下標
數組名[常量表達式]
左到右
--
()
圓括號
(表達式)/函數名(形參表)
--
.
成員選擇(對象)
對象.成員名
--
->
成員選擇(指針)
對象指針->成員名
--
2
-
負號運算符
-表達式
右到左
單目運算符
~
按位取反運算符
~表達式
++
自增運算符
++變量名/變量名++
--
自減運算符
--變量名/變量名--
*
取值運算符
*指針變量
&
取地址運算符
&變量名
!
邏輯非運算符
!表達式
(類型)
強迫類型轉換
(數據類型)表達式
--
sizeof
長度運算符
sizeof(表達式)
--
3
/
除
表達式/表達式
左到右
雙目運算符
*
乘
表達式*表達式
%
余數(取模)
整型表達式%整型表達式
4
+
加
表達式+表達式
左到右
雙目運算符
-
減
表達式-表達式
5
<<
左移
變量<<表達式
左到右
雙目運算符
>>
右移
變量>>表達式
6
>
大於
表達式>表達式
左到右
雙目運算符
>=
大於等於
表達式>=表達式
<
小於
表達式<表達式
<=
小於等於
表達式<=表達式
7
==
等於
表達式==表達式
左到右
雙目運算符
!=
不等於
表達式!= 表達式
8
&
按位與
表達式&表達式
左到右
雙目運算符
9
^
按位異或
表達式^表達式
左到右
雙目運算符
10
|
按位或
表達式|表達式
左到右
雙目運算符
11
&&
邏輯與
表達式&&表達式
左到右
雙目運算符
12
||
邏輯或
表達式||表達式
左到右
雙目運算符
13
?:
條件運算符
表達式1?
表達式2: 表達式3
右到左
三目運算符
14
=
賦值運算符
變量=表達式
右到左
--
/=
除後賦值
變量/=表達式
--
*=
乘後賦值
變量*=表達式
--
%=
取模後賦值
變量%=表達式
--
+=
加後賦值
變量+=表達式
--
-=
減後賦值
變量-=表達式
--
<<=
左移後賦值
變量<<=表達式
--
>>=
右移後賦值
變量>>=表達式
--
&=
按位與後賦值
變量&=表達式
--
^=
按位異或後賦值
變量^=表達式
--
|=
按位或後賦值
變量|=表達式
--
15
,
逗號運算符
表達式,表達式,…
左到右
--
闡明:
同一優先級的運算符,運算次第由結合方向所決議。
復雜記就是:! > 算術運算符 > 關系運算符 > && > || > 賦值運算符
char s[] = "012345678";
char *p = s;
1.++*p:P指向S[0],並把S[0]加1做為表達式的值,所以輸入為1,此時S[0]=='1'
2.++(*p):P還指向S[0](S[0]如今的值為1),並把S[0]加1做為表達式的值,所以輸入為2,此時S[0]=='2'
3.*(++p):p指向S[1],然後取S[1]的值作為表達式的值,輸入'1'
4.*++p :P指向S[2],然後取S[2]的值作為表達式的值,輸入'2'
5.(*p)++:P還是指向S[2],取S[2]的值作為表達式的值,所以輸入'2',然後S[2]的值加1,S[2]==3
6.*(p++):P還是指向S[2](現值為3),取S[2]的值作為表達式的值,所以輸入'3',然後P指向S[3]
7.*p++ :P指向S[3],取S[3]的值作為表達式的值,所以輸入'3',然後P指向S[4];
*p++是先取出*p的值,然後讓p++
(*p)++是先取出*p的值,讓這個值++
*(P++)是先取出*p的值,讓p++
所以,*p++等價於*(P++)
而且printf的運轉順序是從右向左運轉。而且右++是在整個運算表達式運算完才停止,而且右++的執行順序是從左到右停止。
而左++遇到變量就會立刻添加變量的值