C語言中的儲存類別,鏈結和記憶體管理

2022-08-19 07:33:14 字數 1398 閱讀 7166

這是本人關於 c primer plus 這本c語言經典著作 第12章的乙個總結 如有不對 歡迎指出

int   a  =     3; 

這個東西建立了乙個 叫做 a 的識別符號   , 從硬體上來看 就是 有乙個叫a的識別符號占用了一定物理記憶體  

識別符號有兩個性質  乙個叫    作用域(scope)   還有乙個叫  鏈結(linkage)

①塊作用域

②檔案作用域

③函式原型作用域   (還有乙個叫函式作用域不用管他)

①塊作用域

intmax(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語言根據變數的生存週期來劃分,可以分為靜態儲存方式和動態儲存方式。靜態儲存方式 是指在程式執行期間分配固定的儲存空間的方式。靜態儲存區中存放了在整個程式執行過程中都存在的變數,如全域性變數。動態儲存方式 是指在程式執行期間根據需要進行動態的分配儲存空間的方式。動態儲存區中存放的變數是根據程式執行的...