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第一功能是隱藏,其次是存放在全局數據區內容保持。