部分c語言知識總結

2021-10-09 03:45:14 字數 1447 閱讀 3947

持續更新ing

1.extern關鍵字的作用

1.引用同乙個檔案中的變數

2.引用不同檔案中的變數

3.引用不同檔案中的函式(需要指明函式型別和返回值)

2. 全域性變數可不可以定義在可被多個.c 檔案包含的標頭檔案中?為什麼?

答 、可以,在不同的 c 檔案中以 static 形式來宣告同名全域性變數。可以在不同的 c 檔案中宣告同名的全域性變數,前提是其中只能有乙個 c 檔案中對此變數賦初值,此時連線不會出錯。

3.statac 全域性變數、區域性變數、函式與普通全域性變數、區域性變數、函式

static 全域性變數與普通的全域性變數有什麼區別? static 區域性變數和普通區域性變數有什麼區別? static 函

數與普通函式有什麼區別?

答:非靜態全域性變數本身是靜態儲存方式,儲存在資料段(初始化的)或者bss段(未初始化或者初始化為0的),加上static仍然也是靜態儲存方式(存放在資料段或者bss段),非靜態全域性變數的作用域是整個源程式,當有多個原始檔時,其他檔案也可以使用,靜態全域性變數的作用域是單獨該原始檔。

非靜態區域性變數的作用域和時域都是該函式體,儲存在棧中,靜態區域性變數作用域還是該函式體,但時域是整個原始檔,儲存再資料段中;

普通函式(整個源程式)和static函式(單獨該原始檔)的作用域不同;

static 全域性變數和普通全域性變數有什麼區別:static全域性變數只初始化一次,防止在其他檔案中被引用;

static 區域性變數和普通區域性變數有什麼區別:static區域性變數只初始化一次,下一次根據上一次的結果;

static 函式與普通函式有什麼區別:static函式在記憶體中只有乙份,普通函式每次在記憶體中維持一分拷貝;

4.程式的記憶體分配

答:乙個由 c/c++編譯的程式占用的記憶體分為以下幾個部分

1、棧區( stack) 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

2、堆區(heap) 一般由程式設計師分配釋放(malloc、free等),若程式設計師不釋放,程式結束時可能由 os **。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。

3、全域性區(靜態區)( static) 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域(資料段),未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域(bss段)。程式結束後由系統釋放。

4、文字常量區 常量字串就是放在這裡的。程式結束後由系統釋放。

5、程式**區 存放函式體的二進位制**

例子程式

這是乙個前輩寫的,非常詳細

int a=0;

//全域性初始化區

char

*p1;

//全域性未初始化區

main()

總結C語言指標部分的知識

一級指標 二級指標 一維陣列 二維陣列 指標和陣列的關係 指標陣列 陣列指標 函式指標 一 一級指標 此圖對應的 是 include int main 指標存在原因是什麼?乙個小的單元是乙個位元組 對於32位機器,假設有32根位址線,那麼位址是 00000000 00000000 00000000 ...

C語言基礎知識部分總結一

一 字元資料的非格式化輸入 getchar 讀取使用者的按鍵資訊,他的返回值是使用者按鍵的ascii碼 工作原理 呼叫getchar時,程式等待從緩衝區中取出第乙個字元 使用者輸入的字元存放在鍵盤緩衝區,直到使用者按回車鍵為止 如果使用者輸入的不止乙個字元,那麼其他的字元將留在鍵盤緩衝區,等待後續的...

C語言知識總結

分析靜態儲存區 堆 棧 靜態儲存區 編譯時由編譯器分配,由系統釋放,其存放在的是全域性變數 static變數和常量。對 由程式設計師自己分配釋放,若不手動釋放程式結束才釋放。若對分配空間不用時不釋放而一味分配,則可能造成記憶體洩露,其容量取決於虛擬記憶體,較大。區別 1 棧是由高位址向低位址擴充套件...