static關鍵字

Static詳解 函數

該關鍵字有兩個做用第一隱藏第二修飾存儲位置 spa

首先說明數據的存儲方式,全局變量(函數外定義) 內存

棧變量(函數內定義)堆變量(malloc申請的變量) 作用域

靜態存儲區和動態存儲區。

從變量存儲位置看,可將變量存儲區分爲靜態存儲區和動態存儲區 變量

內存靜態存儲區(全局數據區) 程序

①靜態局部變量(函數內定義,static聲明,本函數有效,下次調用保持上次值) im

②靜態外部變量(函數外定義,static聲明,本文件有效) 總結

③外部變量(即全局變量,文件外定義,使用時extern聲明,本工程有效) 數據

內存動態存儲區(棧區,除寄存器變量外) static

①自動變量(函數內定義,默認auto聲明,函數內有效)

②形式參數(函數內有效)

CUP寄存器變量(register聲明)

動態存儲和靜態存儲

從變量存在的時間看,可將變量分爲動態存儲和靜態存儲(此處不強調存儲位置,強調存在時間),靜態存儲是在程序運行整個時間內都存在,動態變量則是調用時在棧上臨時分配,調用結束,變量消亡。

動態存儲:

①自動變量(函數內定義,默認auto聲明,函數內有效)

②形式參數(函數內有效)

③寄存器變量(register聲明)

靜態存儲:

①靜態局部變量(函數內定義,static聲明,函數內有效,下次調用保持上次值)

②靜態外部變量(函數外定義,static聲明,本文件有效)

③外部變量(文件外定義,使用時extern聲明,本工程有效)

局部變量和全局變量

從變量做用域看,將變量分爲局部變量和全局變量。

局部變量:

①自動變量,即動態局部變量(函數內定義,默認auto聲明)

②靜態局部變量(函數內定義,static聲明)

③寄存器變量

④形式參數能夠聲明爲自動變量或寄存器變量

全局變量:

①靜態外部變量(函數外定義,static聲明)

②外部變量(文件外定義,使用時extern聲明)

 

總結:全局變量、static聲明的變量存儲在全局數據區,局部變量存儲在棧上,register變量存儲在CPU寄存器中函數調用結束消亡。

做用於變量時,首先說明該變量只在該文件有效,其次說明該變量是靜態變量,存儲於全局數據,而且內容持久保持除非「人爲」改變

全局數據區的變量默認值爲0

做用於函數時,說明該函數只在本文件有效,即隱藏!

所以,static第一功能是隱藏,其次是存放在全局數據區內容保持。

相關文章
相關標籤/搜索