C語言複習總結篇(二)

2021-08-04 14:35:32 字數 1804 閱讀 4594

1、棧stack

棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動(向低位址擴充套件的資料結構,是一塊連續的記憶體區域);棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。棧也稱為後進先出表。

vs裡預設棧大小為1m,在「專案」選項可修改其大小

2、佇列queue

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

3、堆heap

由程式設計師自己管理的記憶體空間,用malloc等記憶體分配函式獲取記憶體即是從堆中分配記憶體。從堆中分配的記憶體需要程式設計師手動釋放,如果不釋放,而系統記憶體管理器又不自動**這些堆記憶體的話(實現這一項功能的系統很少)那就一直被占用。如果一直申請堆記憶體,而不釋放,記憶體會越來越少(記憶體洩漏),很明顯的結果是系統變慢或者申請不到新的堆記憶體。而過度的申請堆記憶體(可以試試在函式中申請乙個1g的陣列!),會導致堆被壓爆,結果是災難性的。

堆記憶體向高位址擴充套件,是不連續的記憶體區域。

4、如何動態建立二維陣列?

(1)、轉化為一維陣列申請

typedef int (*parr)[10];

parr p = (parr)malloc(n*10

*sizeof(int));

(2)、先申請全部行首指標,在按行逐行申請

int main()..

.for(i = 0;inull;

}

如圖所示:

5、編譯過程

6、struct、union、enum等記憶體對齊問題

struct a    //位段

注意:位段必須為int,不能超過32位,及4個位元組,且位元組一定要是4的倍數

union b

union取位址,取最大的一位

enum

color

(1)、變數的值預設從0開始;

(2)、後面的值為前面值+1;

(3)、如果有賦值,以賦值為準;

struct ce};

**記憶體對齊時與單個資料型別中的變數型別大小對齊**

struct e

// 如果沒有變數名,沒有型別名,會生成透明變數

};

struct f

// 有型別名,沒定義變數,就不佔記憶體

};

#pragma pack(1)    //與1對齊(取消記憶體對齊)

struct a

C語言複習總結篇 一

1 容易出錯的運算子 1 i i 先加減,在賦值 i i 先賦值,在加減 2 表示式a 表示式b 若a為假,則不計算b 表示式a 表示式b 若a為真,則不計算b 3 按位 相同位數的兩個數都為1,則為1。若有乙個為0,則為0。按位 相同位數中有乙個為1,則為1。否則為0。異或 相同位上不一樣為1,一...

C語言複習 二

引言 不會將每乙個部分都詳述,只關注於一些自己認為重要的或常錯的,若有不足,還望指出 switch 細節 括號內必須是整型或列舉型別 遇到break才會跳出 case包含的必須是常量 continue 停止本次迴圈,重新開始下次迭代 函式的三要素 返回值型別,函式名稱,形式引數列表 在呼叫函式時,需...

C語言複習總結(2)

c語言的理解。在複習過程中,我發現經過乙個暑假以後,很多語法的細節都記得模糊不清。並且,在我複習函式的時候,發現自己經常容易搞錯格式。值得強調的是在寫迴圈程式時,一定要弄清楚迴圈的條件。並且,對每乙個知識點,都應該立即編出對應的程式,有時可能還會有語法錯誤,碰到更好的方法也可以試一下,很多時候你想想...