1、棧stack
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動(向低位址擴充套件的資料結構,是一塊連續的記憶體區域);棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。棧也稱為後進先出表。
vs裡預設棧大小為1m,在「專案」選項可修改其大小
2、佇列queue
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
3、堆heap
由程式設計師自己管理的記憶體空間,用malloc等記憶體分配函式獲取記憶體即是從堆中分配記憶體。從堆中分配的記憶體需要程式設計師手動釋放,如果不釋放,而系統記憶體管理器又不自動**這些堆記憶體的話(實現這一項功能的系統很少)那就一直被占用。如果一直申請堆記憶體,而不釋放,記憶體會越來越少(記憶體洩漏),很明顯的結果是系統變慢或者申請不到新的堆記憶體。而過度的申請堆記憶體(可以試試在函式中申請乙個1g的陣列!),會導致堆被壓爆,結果是災難性的。
堆記憶體向高位址擴充套件,是不連續的記憶體區域。
4、如何動態建立二維陣列?
(1)、轉化為一維陣列申請
(2)、先申請全部行首指標,在按行逐行申請typedef int (*parr)[10];
parr p = (parr)malloc(n*10
*sizeof(int));
如圖所示: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語言的理解。在複習過程中,我發現經過乙個暑假以後,很多語法的細節都記得模糊不清。並且,在我複習函式的時候,發現自己經常容易搞錯格式。值得強調的是在寫迴圈程式時,一定要弄清楚迴圈的條件。並且,對每乙個知識點,都應該立即編出對應的程式,有時可能還會有語法錯誤,碰到更好的方法也可以試一下,很多時候你想想...