持續更新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 棧是由高位址向低位址擴充套件...