C語言之深度剖析Study

2021-05-07 13:52:39 字數 2251 閱讀 2938

chapter1

1定義與宣告:定義是編譯器建立乙個物件,為這個物件分配一塊記憶體並給它取名字。宣告沒有分配記憶體。

2 register:

盡可能的將變數存在

cpu內部暫存器中而不是通過記憶體定址訪問以提高效率,但

register

不能用位址運算子&

3 static

作用:1

修飾變數

全域性和區域性

2 修飾函式成為內部函式

4關鍵字

sizeof

5 const:

編譯器通常不會為普通

const

唯讀變數分配儲存空間,而是將他們儲存在符號表中,這使得他成為乙個編譯期間的值,沒有了儲存與讀記憶體的操作,使得它效率很高。

#define

巨集在預編譯階段進行替換,而

const

修飾的唯讀變數在編譯的時候確定其值。

#define

巨集沒有型別,而

const

修飾的唯讀變數具有特定的型別。

6volatile

:易變,不穩定。這種變數是隨時可能發生變化的。每次使用它的時候必須從記憶體中取出

i的值,即保證對特殊位址的穩定訪問。

7 struct最後1

個byte

長即使是空的也一樣

柔性陣列

(flexible array

)結構中的最後乙個元素允許是未知大小的陣列,叫做柔性陣列成員。

struct

預設屬性是

public

的8big endian :

字資料的高位元組儲存在低位址,低位元組儲存在高位址。

little endian:

字資料的低位元組儲存在高位址,低位元組儲存在低位址

怎樣check

是big endian

還是little endian

int checksystem()

c;c.i=1;

return(c.ch == )

}9 enum

與define

區別1 #define

巨集常量是在預編譯階段進行簡單替換,列舉常量則是在編譯的時候確定其值

2在一般編譯器裡,可以除錯列舉常量,不可以除錯

#define 3

列舉可以一次定義大量相關的常量,而

#define

巨集一次只能定義乙個

chapter3 preprocessing

10 #define#undef#include

#if#else#elif #ifdef#ifndef

#line

改變當前行數和檔名稱

#error

遇到#error

就會生成乙個編譯錯誤提示訊息,並停止編譯

#pragma

為實現時定義的命令,允許向編譯程式傳送各種指令例如,編譯程式可能有一種選擇,支援對程式執行的跟蹤,可用

#pragma

語句指定乙個跟蹤選擇。

與define

比,const

修飾的資料是有型別的,

#define

巨集定義的資料沒有型別。編譯器為

const

修飾的制度變數作型別校驗。但是

const

修飾的不是常量而是

readonly

的變數,

const

修飾的唯讀變數不能用來作為定義陣列的維數,也不能放在

case

關鍵字後面。

#undef

撤掉巨集定義

條件編譯

#ifdef #ifndef

#pragma

設定編譯器的狀態或者是指示編譯器完成一些特定的動作。

#pragma message

在編譯資訊輸出視窗輸出相應的資訊

#pragma pack

記憶體對齊

#pragma pack(n)

編譯器將按照

n個位元組對齊

#pragma pack()

編譯器將取消自定義位元組對齊

第五章記憶體管理

記憶體三個區:靜態區,堆,棧

靜態區:自動全域性變數和

static

變數,在整個程式的生命週期都存在

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

堆:由malloc/new

分配,free/delete

決定

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...

C語言深度剖析 列舉

列舉與 define巨集的區別 1 define 巨集常量是在預編譯階段進行簡單替換。列舉常量則是在編譯的時候確定其值。2 一般在編譯器裡,可以除錯列舉常量,但是不能除錯巨集常量。3 列舉可以一次定義大量相關的常量,而 define 巨集一次只能定義乙個。列舉能做到事,define 巨集能不能都做到...