C語言知識點複習(1)

2021-10-01 17:16:57 字數 987 閱讀 7639

閱讀《c語言深度解剖》總結一些已經生疏的知識點。

定義和宣告的區別:定義,建立乙個物件,並為這個物件分配一塊記憶體,並定義乙個變數名;宣告,告訴編譯器變數名已經被匹配到一塊記憶體上了或預定變數名,使其不能被其他的記憶體繫結。他們的區別就在於,定義建立了物件並為這個物件分配了記憶體,宣告沒有分配記憶體

原碼反碼補碼:(以8位2進製為例)原碼,首位代表正負,其餘位代表數值,如1000 0001為-1,0000 0001為1;反碼,正數的反碼為其自身,負數的反碼為其符號位以外,其他位取反;補碼,正數的反碼為其自身,負數的補碼為其反碼+1。

volatile關鍵字:告訴編譯器,該變數的值隨時可能發生變化,使用該值時,每次都需要從記憶體中重新獲取。

struct:在c語言中乙個空結構體的大小是1byte。有乙個有趣的地方是golang的空結構體大小為0。

const修飾typedef定義的結構體指標型別時,不論放在前後,修飾的物件都是該指標,而不是指標指向的內容。對於編譯器來說,只認為結構體指標型別是乙個整體,不會拆分。

c語言編譯器的貪心法:編譯器將程式分解成符號的方法是,從左到右乙個乙個字元地讀入,如果該字元可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分,如果可能,繼續讀入下乙個字元,重複上述判斷,直到讀入的字元組成的字串已不再可能組成乙個有意義的符號。這個處理的策略被稱為「貪心法」。需要注意的是,除了字串和字元常量,符號的中間不能嵌有空白(空格,製表符,換行符等)。

注釋是先於預處理指令被處理的,所以不能用define來定義注釋符號(//,/,/等)。

define整型時,可以適當新增ul等字尾,避免溢位。

undef可以撤銷巨集定義。

預算符:##,可以用於巨集函式的替換部分,這個運算子把兩個語言符號組合成單個語言符號。

字串常量是儲存在記憶體的常量區。棧的效率高,但是空間大小有限;堆的空間比較大。

malloc可以申請0位元組記憶體,返回非null指標。

C語言知識點 複習(1)

知識點總結 1.所有巨集定義 列舉常量 唯讀常量全用大寫字母命名,用下劃線分割單詞。2.不同型別資料之間的運算注意精度擴張問題,一般低精度向高精度擴張。3.sizeof在計算變數的時候,括號可以省略 在計算資料型別的時候,括號是不可以省略的。4.const應該改寫為readonly,是唯讀的變數,並...

C 知識點 複習(1)

知識點 c 1.引用必須在宣告的引用時將其初始化,而不能像指標那樣,先宣告後定義。2.向函式傳參時,如果下在函式內部改變資料,想要在函式外看到,則可以使用傳位址,和傳引用的方式。3.按值傳遞和按引用傳遞,看起來是一樣的,主要是通過原型和函式定義來識別。4.返回引用時最重要的一點是,應避免返回函式終止...

C語言知識點複習

最近一直在寫go的 c語言有些生疏,復讀了一遍 高質量c程式設計指南 將其中有些遺忘的知識點總結如下。1 標頭檔案功能 呼叫庫功能 型別安全檢查 2 宣告 int x,y x為int指標,y為int值 3 浮點變數和0比較時應與spsinon比較 4 多重迴圈巢狀時,長的迴圈應放在內層,以減少cpu...