C語言學習筆記整理3

2021-08-21 18:36:45 字數 1924 閱讀 3535

1、記憶體分配

2、關鍵字

記憶體分配:儲存在四塊區域

棧(stack)、堆(heap)、資料區(.data和.bas)、常量區(唯讀)

1、棧:區域性變數、函式的形參,自動變數(auto修飾)

特點:1、棧空間是os(作業系統)自動分配和**,程式設計師自己不用管

2、可以被反覆使用

3、棧空間是髒的。------儲存上一次使用的結果==>定義區域性變數的時候一定要初始化

4、臨時性,不能返回棧變數的指標!

2、堆空間:;malloc,ralloc,calloc

特點:1、靈活:程式設計師自己手動分配,手動釋放

2、記憶體量大

3、通過free()手動釋放所申請的記憶體空間。如果你忘了釋放堆空間的記憶體,這塊空間一直被占用著!

系統會覺得你一直在使用就不會把這塊記憶體分配給其他的程式。==>記憶體洩露

4、臨時性:malloc和free之間,這塊記憶體是歸你使用的。

5、堆空間也是髒的。==》使用之前需要清空一下

3.記憶體中的各個段

.text段:**段,儲存的程式中各個函式的指令。

.data段資料段:儲存的全部變數,顯示初始化為非0靜態變數(static修飾的,例1:static int num = 12;)

.bss段:儲存的是顯示初始化為0,或者是沒有初始化的靜態變數

關鍵字:

1-const:修飾變數,希望將這個變成「常量」

用法:(1)修飾普通變數:

const無論是放在資料型別的前面或是後面,都是將變數修飾為常量,不能改變變數的值。

(2)和指標變數結合起來使用

如果想知道const是修飾誰的,從const開始往右看!

看你先遇到誰,如果是先遇到*p,那就是*p不能被改變。

如果先遇到p,就是p不能被改變

例2:int a = 1;

int const *p = &a;  //*p不能被改變

通過指標變數不能間接改變a的值,但是可以通過變數本身來改變。

上例2所示語句條件下:

a = 12;  //對

*p = 11; //報錯

2-static:靜態變數

作用:1、修飾區域性變數:延長區域性變數的生命週期。

2、如果修飾全域性變數,函式;具有「隱藏」的功能,保證函式和全域性變數只能夠在本文中使用(.c)

不能夠在其他的檔案中使用,也就是不能夠在其他的.c檔案中使用

3-volatile:防止編譯器優化處理

volatile int temp = 10;

提醒編譯器,volatile後面修飾的變數隨時可能改變!要求編譯器將編譯後的程式每次讀取變數數的

時候,直接從變數的位址裡面去讀取,而不是去暫存器裡面去讀取==》暫存器裡面的數值和位址裡的數值不一樣。

4-register:

有register修飾的變數,是暫存器變數!告訴編譯器,register修飾的變數會經常呼叫,請求編譯器盡可能地把

register修飾的變數儲存到cpu內部的暫存器上。而不是通過記憶體取位址來呼叫==》以此來提高效率

注意點:

1、對變數的操作,因為可能不是儲存到記憶體裡面,所有就不能用&來對變數進行操作

2、變數的型別能夠被cpu所接受!register修飾的變數(<= int型的),但是有些機器也可以是浮點型。

3、不能修飾全域性變數,函式!可以修飾區域性變數。

5-extern:外部宣告

1、函式定義的時候,在前面加上extern表明這個函式是外部函式,可以在其他的檔案中呼叫!如果不加,預設是外部函式,可以在其他檔案中呼叫。

(這條是extern和static之間的區別)

2、在呼叫的地方extern進行外部宣告,表明這個函式在別的檔案中定義了,如果不用extern的話,會有警告。

怎麼測試系統是大端還是小端儲存方法:

1、採用共用體的方式

2、指標的方式

C語言學習筆記(3)

edited by silence獨家 命名規範 1 識別符號的命名要清晰,明了,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤會 2 除了常見的通用縮寫以外,不使用單詞縮寫,不得使用漢語拼音 3 產品 專案組內部應保持統一的命名風格 4 用正確的反義詞組命名具有互斥意義的變...

C語言學習筆記3

指標 為什麼需要指標?使用指標處理陣列中儲存的資料,執行速度要比使用 下標 快很多。指標可以做到更改函式呼叫處之前的區域性變數 指標 乙個變數的位址為該變數的 指標 十個常量 指標變數 指標變數是乙個變數,用於儲存位址的值 指標變數的宣告 資料型別 指標變數名 int i 10 int p1 可以將...

C語言學習筆記(3)

基礎知識 一維陣列的定義方式為 型別說明符 陣列名 常量表示式 例如 int a 10 說明整型陣列 a,有 10 個元素。float b 10 c 20 說明實型陣列 b,有 10 個元素,實型陣列 c,有 20 個元素。char ch 20 說明字元陣列 ch,有 20 個元素。初始化賦值的一般...