日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C 语言运算符优先级

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C 语言运算符优先级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C 語言運算符優先級

優先級運算符描述結合性
1++ --后綴自增與自減從左到右
()函數調用
[]數組下標
.結構體與聯合體成員訪問
->結構體與聯合體成員通過指針訪問
(type){list}復合字面量(C99)
2++ --前綴自增與自減從右到左
+ -一元加與減
! ~邏輯非、逐位取反
(type)類型轉換
*解引用
&取地址
sizeof取大小
_Alignof對其要求(C11)
3* / %乘法、除法、求余從左到右
4+ -加法、減法
5<< >>左移、右移
6< <=小于、小于等于
> >=大于、大于等于
7== !=等于、不等于
8&逐位與
9^逐位異或
10|逐位或
11&&邏輯與
12||邏輯或
13? :三元條件從右到左
14=簡單賦值
+= -=以和賦值、以差賦值
*= /= %=以積、商及余數賦值
<<= >>=以逐位左移及右移賦值
&= ^= |=以逐位與、異或及或賦值
15,逗號從左到右

如何理解優先級

分析表達式時,操作數首先與較高優先級的運算符結合(如同用括號)。例如,表達式 *p++ ,因為后綴自增++比解引用*的優先級高,所以p先和++結合,所以被分析為 *(p++),而非 (*p)++ 。

如何理解結合性

當運算符具有相同優先級時,操作數按照結合性來結合。例如表達式 a = b = c ,b 的兩側都是=,優先級相同,但是=的結合性是從右到左,即右邊的優先,所以 b 優先與右邊的=結合,所以被分析為 a = (b = c) 而非(a = b) = c。

幾點注意

  • 優先級或者結合性與求值順序是獨立的。
  • 例如:表達式 f1() + f2() + f3() 被分析成 (f1() + f2()) + f3() ,因為 +的結合性從左到右。但運行時對 f3 的函數調用可以最先、最后,或在 f1() 與 f2() 之間求值,同理, f1() 與 f2() 各自的求值順序也不一定。

  • C 語言標準不指定運算符優先級。它指定語言文法,而優先級表格從它導出,以簡化理解。

  • 結合性規定對于一元運算符是冗余的,且只為完備而顯示:一元前綴運算符始終從右到左結合(例如++*p 為++(*p));而一元后綴運算符始終從左到右結合( 例如 a[1][2]++為((a[1])[2])++)。

  • 結合性對成員訪問運算符有意義:a.b++ 分析為(a.b)++而非 a.(b++) 。

  • sizeof 的操作數不能是類型轉型:表達式 sizeof (int) * p 無歧義地轉譯成 (sizeof(int)) * p ,而非 sizeof((int)*p) 。

  • 條件運算符中部( ? 與 : 之間)的表達式分析為如同加括號:忽略其相對于 ?: 的優先級。

  • 參考資料

    https://zh.cppreference.com/w/c/language/operator_precedence

    總結

    以上是生活随笔為你收集整理的C 语言运算符优先级的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。