C語言深度剖析學習錯誤點記錄

2021-09-07 07:09:37 字數 1549 閱讀 8327

0. static修飾變數和函式

static修飾變數,1)限定作用域,本檔案內。全域性變數(自定義起,本檔案前面要用需extern宣告),區域性變數函式內;2)生命週期,程式執行期間一直儲存。

static修飾函式,限定作用域,本檔案內。

1. enum型別變數大小為4(sizeof),不論enum成員數量。

2. enum成員間用「,」分割,最後乙個成員後可不加分隔號。

而struct、union成員間用「;」分割,最後乙個成員後要加分隔號。而struct的成員初始化用「,」分割,最後成員後加不加「,」均可。

3. stu_pst為typedef的struct student的型別,const stu_pst stu3和stu_pst const stu4完全等價。資料型別可忽略。

4. {}作用就是打包。

5. const修飾的唯讀變數不能用來作為定義陣列的維數,也不能放在case關鍵字後面。

6. p為typedef的struct student型別,p+0x1為&p + sizeof(struct student)*1。

7. c語言中,所有非陣列形式的資料實參均以傳值形式呼叫。(對實參做乙份拷貝並傳遞給被呼叫的函式,函式不能修改作為實參的實際變數的值,而只能修改傳遞給它的那份拷貝)

c語言中,當一維陣列作為函式引數的時候,編譯器總是把它解析成乙個指向其首元素首位址的指標。

8. 記憶體可分為三個區:靜態區、棧、堆

靜態區:儲存自動全域性變數和static變數(包括static全域性和區域性變數)。靜態區的內容在整個程式的生命週期內都存在,由編譯器在編譯的時候分配。

棧:儲存區域性變數。棧上的內容只在函式範圍內存在,當函式執行結束時,這些內容也會自動被銷毀。其特點就是效率高,但空間大小有限。

堆:由malloc系列函式或new操作符分配的記憶體。其生命週期由free或delete決定。在沒有釋放之前一直存在,直到程式結束。其特點是使用靈活,空間比較大,但容易出錯。

9. 指標一定要初始化為null,這樣才能用if(null != p)來判斷。

static作用進一步說明:

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。

(1)先來介紹它的第一條也是最重要的一條:隱藏。

當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性

(2)static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化。共有兩種變數儲存在靜態儲存區:全域性變數和static變數,只不過和全域性變數比起來,static可以控制變數的可見範圍,說到底static還是用來隱藏的。

(3)static的第三個作用是預設初始化為0。其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00,某些時候這一特點可以減少程式設計師的工作量。比如初始化乙個稀疏矩陣,我們可以乙個乙個地把所有元素都置0,然後把不是0的幾個元素賦值。如果定義成靜態的,就省去了一開始置0的操作。再比如要把乙個字元陣列當字串來用,但又覺得每次在字元陣列末尾加』\0』太麻煩。如果把字串定義成靜態的,就省去 了這個麻煩,因為那裡本來就是』\0』。

C語言深度剖析學習錯誤點記錄

0.static修飾變數和函式 static修飾變數,1 限定作用域,本檔案內。全域性變數 自定義起,本檔案前面要用需extern宣告 區域性變數函式內 2 生命週期,程式執行期間一直儲存。static修飾函式,限定作用域,本檔案內。1.enum型別變數大小為4 sizeof 不論enum成員數量。...

C語言深度剖析

c語言深度剖析 1,編譯器通常不為普通const唯讀變數分配儲存空間,而是將他們儲存在符號表中,使得它成為乙個編譯期間的值,沒有了儲存與讀記憶體的操作,使得它的效率更高。2,const int p p可變,p指向的物件不變。int const p p可變,p指向的物件不可變 int const p ...

C語言深度剖析

什麼是資料型別?資料型別是建立變數的模具 資料型別是建立變數的模具 型別的本質 資料型別可理解為固定記憶體大小的別名 資料型別的本質是固定記憶體大小的別名 變數本質 變數是一段實際連續儲存空間的別名 型別和變數的關係 vim program.c include int main gcc progra...