C語言學習筆記之 記憶體管理
阿新 • • 發佈:2020-09-20
記憶體管理
記憶體分割槽
普通區域性變數
定義
// 區域性變數 // 在{}裡面定義的不加任何修飾的變數 就是區域性變數 // 作用範圍:離它最近的{}之間 // 生命週期:離它最近的{}結束,區域性變數就釋放 // 儲存空間:棧區 // 注意事項: // 區域性變數 不初始化 內容隨機 // 不同範圍區域性變數同名 就近原則 // 例 #include <stdio.h> void test() { int num; printf("%d\n",num); // 區域性變數,作用域:test函式 } int main() { test(); return 0; } // 執行結果: 4200363
普通全域性變數
// 全域性變數
// 定義:在函式外定義的變數 就是普通全域性變數
// 作用範圍:當前原始檔和其他原始檔(加extern修飾)
// 生命週期:整個程序
// 儲存空間:全域性區
// 注意事項:
// 普通全域性變數不初始化 內容為0
// 普通全域性變數和普通區域性變數同名 就近原則
// 例
#include <stdio.h>
int num; // 普通全域性變數
int main()
{
printf("%d",num);
return 0;
}
// 執行結果
0
靜態區域性變數(static修飾)
// 靜態區域性變數 // 在{}裡面定義的 用static修飾 的變數 就是靜態區域性變數 // 作用範圍:離它最近的{}之間 // 生命週期:整個程序 // 儲存空間:全域性區 // 注意事項: // 靜態區域性變數不初始化 內容為0 // 靜態區域性變數多次初始化 只有第一次有效 // 例 #include <stdio.h> int test() { static int num = 10; // 靜態區域性變數 ++num; printf("%d\n",num); } int main() { test(); test(); test(); return 0; } // 執行結果 11 12 13
靜態全域性變數
// 靜態全域性變數
// 定義:在函式外定義的 被static修飾 的變數 就是普通全域性變數
// 作用範圍:只在當前原始檔有效
// 生命週期:整個程序
// 儲存空間:全域性區
// 注意事項:
// 普通全域性變數不初始化 內容為0
靜態函式與普通函式的區別
// 普通函式
int test1(){;}
// 靜態函式
static int test2(){;}
// 普通函式:當前原始檔和其他原始檔(加extern修飾)都可以使用
// 靜態函式:只可以在當前原始檔使用