這是本人關於 c primer plus 這本c語言經典著作 第12章的乙個總結 如有不對 歡迎指出
int a = 3;
這個東西建立了乙個 叫做 a 的識別符號 , 從硬體上來看 就是 有乙個叫a的識別符號占用了一定物理記憶體
識別符號有兩個性質 乙個叫 作用域(scope) 還有乙個叫 鏈結(linkage)
①塊作用域
②檔案作用域
③函式原型作用域 (還有乙個叫函式作用域不用管他)
①塊作用域
int
max(int a , int b, int c)
②檔案作用域
#include;
int a = 0; 這裡我們看到 a 的是定義在所有函式外面的,他可以直接在任何函式,包括主函式中直接使用 這叫 檔案作用域;
int main(void)
③函式原型作用域
#include
int main(void)
int max(~~~) 這就叫函式原型作用域 , 不知道怎麼解釋 自己腦補吧,,,,
①無鏈結
函式原型作用域的變數 都是無連線的,就是說函式的無連線變數都是屬於函式本身的;
②內部鏈結
③外部連線
內部鏈結和外部鏈結的區別就是 看定義變數的時候 加沒加 static;
據說分為 四種儲存期 靜態儲存期 執行緒儲存期(這個我不懂不管) 自動儲存期 動態分配儲存期
靜態和自動
#include
void fn(void) 相信可以看出區別了吧?
void fm_static(void)
int main(void)
這裡是執行結果
n=10 n++=11 -------------------- static m=10 m++=11 -------------------- n=10 n++=11 -------------------- static m=11 m++=12
動態分配儲存期
int *a;
a = (int*)malloc(30 * sizeof(int)) 意思是說 a是乙個整型指標 然後給這個指標分布了 30個 int 大小的 記憶體 換句話說 相當於 int a[30];
free(a); 意思就是說釋放a;
動態分配儲存期的意思就是說 自己決定這個變數活多久;
最後講一下 const 和 define
#const a10 const a 認為a是常量;
#define b 10 這個認為b是變數,只不過這個變數是不可改變的;
C語言 儲存類別 鏈結和記憶體管理
c物件有四種儲存期 靜態儲存期 執行緒儲存期 自動儲存期 動態分配儲存期 double p p double malloc 10 sizeof double const float p p可以指向別處,p指向的值不能變 float const p p不可以指向別處,p指向的值可以改變 const f...
儲存類別,鏈結和記憶體管理
參考資料 根據乙個變數的作用域 可見的範圍 和生命期 它存在多長時間 來劃分儲存類別。根據作用域可分為塊作用域,函式作用域,函式原型作用域,檔案作用域。塊作用域 在 之間都乙個屬於塊作用域。塊裡面定義的變數,作用範圍是從定義處到包含該定義的塊的末尾。函式作用域 這個我也不太清楚,書上講僅用於goto...
C語言中變數儲存類別
c語言根據變數的生存週期來劃分,可以分為靜態儲存方式和動態儲存方式。靜態儲存方式 是指在程式執行期間分配固定的儲存空間的方式。靜態儲存區中存放了在整個程式執行過程中都存在的變數,如全域性變數。動態儲存方式 是指在程式執行期間根據需要進行動態的分配儲存空間的方式。動態儲存區中存放的變數是根據程式執行的...