程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 為何不精通C? 02 C語言中的符號重載,優先級

為何不精通C? 02 C語言中的符號重載,優先級

編輯:關於C語言

本文主要將兩個部分,符號重載和運算優先級問題,這兩個問題很常見,很繁瑣。我猜絕大部分的人在學習時都選擇性忽略該章節的內容。但是在面試時,卻常常考這方面的東西,因為,“精通”之名。  


    C中,具備著符號重載,符號重載是體現在程序上下文語境中,不同符號表現出不同的含義。比如“*”,具備三個含義:聲明指針,指針解引,乘號。 《C專家編程》總結了下所有的符號重載,用以理清C語言作用域規則:

符號 意義

















優先級

       實踐中碰到了一堆操作符,怎麼辦?最佳tips:

但是,要想精通C, 必須能夠看懂別人寫的代碼,所以,一些優先級的常識還是需要鞏固。注:關於聲明部分的優先級,可以參考後續博文








總結下次序吧:

  • 初等運算 () [] -> .
  • 單目運算 
  • 算術  先乘除模,再加減
  • 移位
  • 關系   先 大小,再 等不等
  • 位   同邏輯一樣,都是 先與 後或
  • 邏輯 (不包括!,因為它是單目)
  • 條件
  • 賦值
  • 逗號

通常來說,結合性都是與優先級配合使用的,但是常見課本中一大堆凌亂的表示,讓人眼花缭亂,整體來看,所有的結合性規則可以歸結成以下兩句話:

  • 所有的 都具有右結合性。 何為賦值符呢,我的理解是 “真實調用時,是否”
  • 剩下的,都是左結合性

舉例解釋我對的理解

1、意變

  • !p :這是邏輯非操作符,在調用時,改變了p的值
  • *p:指針操作符,真是調用的是p所指東西,而不是p本身,真是調用發生了改變
  • &a : 取地址,真正調用是a的地址,而不是a,真是調用發生了改變
  • sizeof a: 調用時,返回a的字節長度,而不是a本身,調用發生了改變

以上意變其實都是屬於的部分

2、值變

  • ++i: 調用後i值改變
  • is?true:false: 調用的返回結果不確定,某種意義上,調用的是一個“改變”的東西  謝謝 求道於盲 指出。
  • 賦值運算符:=, += 之類,調用後,值發生了改變

總結:更多的,還是按著直覺走,要記的,就是那些不走尋常路的,另外,我覺得

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved