詳解C語(yǔ)言中的Static關(guān)鍵字
一、static關(guān)鍵字的基本含義
首先,static關(guān)鍵字的意思是靜態(tài)的,用于修飾局部變量,全局變量和函數(shù),修改其數(shù)據(jù)儲(chǔ)存類(lèi)型
1.局部變量:在任意一個(gè)函數(shù)內(nèi)部定義的變量(不加static),初始值不確定,出函數(shù)自動(dòng)銷(xiāo)毀,存放于棧區(qū)。 使用static修飾這個(gè)變量時(shí),編譯器會(huì)把她初始化為零,存儲(chǔ)于靜態(tài)區(qū),函數(shù)返回時(shí)值保持不變,出函數(shù)不銷(xiāo)毀,下一次進(jìn)入函數(shù)依然存在。根本原因——static修飾的局部變量存儲(chǔ)在靜態(tài)區(qū)。
2.全局變量 :普通全局變量定義在函數(shù)體外部,在靜態(tài)區(qū)分配存儲(chǔ)空間,編譯器自動(dòng)對(duì)其初始化。普通全局變量對(duì)整個(gè)工程可見(jiàn),其他文件使用關(guān)鍵字extern外部聲明后可以直接使用。 靜態(tài)全局變量僅對(duì)當(dāng)前文件可見(jiàn),其他文件不可訪問(wèn),其他文件可以定義與其同名的變量,兩者互不影響。 在定義不需要與其他文件共享的全局變量時(shí),加上static關(guān)鍵字能夠有效地降低程序模塊之間的耦合,避免不同文件同名變量的沖突,且不會(huì)誤使用。
3.函數(shù):在函數(shù)的返回類(lèi)型前加上static,就是靜態(tài)函數(shù)。例如:static int main() 靜態(tài)函數(shù)只能在聲明它的文件可見(jiàn),其他文件不能引用該函數(shù)。不同文件可以使用相同名字靜態(tài)函數(shù) 非靜態(tài)函數(shù)可以在另一個(gè)文件直接引用。
二、static關(guān)鍵字的用法
1.當(dāng)使用普通局部變量時(shí),如圖,int a是一個(gè)局部變量,每次出函數(shù)后自動(dòng)銷(xiāo)毀,所以打印出"6666666666";

當(dāng)使用靜態(tài)局部變量時(shí),如圖。static修飾的局部變量除了局部范圍后不會(huì)銷(xiāo)毀,下一次進(jìn)入函數(shù)依然存在。

2.如圖 ,static聲名的函數(shù)不能被另一個(gè)文件引用

三、static關(guān)鍵字的原理
因?yàn)閟tatic修飾的局部變量是存儲(chǔ)在靜態(tài)區(qū)的,static修飾全局變量時(shí),實(shí)際改變的是變量的存儲(chǔ)位置。 局部變量放在棧區(qū)的,被static修飾后放在了靜態(tài)區(qū)。從而導(dǎo)致除了作用域依然存在,生命周期并沒(méi)有結(jié)束
如圖為存儲(chǔ)區(qū)示意圖

總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
詳解C++中賦值,關(guān)系,函數(shù)調(diào)用運(yùn)算符重載的實(shí)現(xiàn)
本文主要為大家講解一下三個(gè)C++中的運(yùn)算符重載,分別是賦值運(yùn)算符重載、關(guān)系運(yùn)算符重載和函數(shù)調(diào)用運(yùn)算符重載,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-06-06
C語(yǔ)言文件操作零基礎(chǔ)新手入門(mén)保姆級(jí)教程
在實(shí)際應(yīng)用中,我們往往需要對(duì)文件進(jìn)行操作,下面這篇文章主要給大家分享了關(guān)于C語(yǔ)言文件操作的零基礎(chǔ)新手入門(mén)保姆級(jí)教程,文中通過(guò)示例代碼以及圖片介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
C/C++ 原生API實(shí)現(xiàn)線程池的方法
線程池,簡(jiǎn)單來(lái)說(shuō)就是有一堆已經(jīng)創(chuàng)建好的線程,接下來(lái)通過(guò)本文給大家介紹C/C++ 原生API實(shí)現(xiàn)線程池的方法,感興趣的朋友跟隨小編一起看看吧2021-11-11
C語(yǔ)言如何在字符數(shù)組中插入一個(gè)字符
這篇文章主要介紹了C語(yǔ)言如何在字符數(shù)組中插入一個(gè)字符,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
C++中左值引用,右值引用,萬(wàn)能引用的關(guān)系及區(qū)別說(shuō)明
這篇文章主要介紹了C++中左值引用,右值引用,萬(wàn)能引用的關(guān)系及區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
詳細(xì)講解C語(yǔ)言中的數(shù)據(jù)以及位運(yùn)算
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中數(shù)據(jù)表示方法以及位運(yùn)算的相關(guān)知識(shí)點(diǎn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
使用C# 判斷給定大數(shù)是否為質(zhì)數(shù)的詳解
本篇文章是對(duì)使用C#判斷給定大數(shù)是否為質(zhì)數(shù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C語(yǔ)言中的內(nèi)存泄露 怎樣避免與檢測(cè)
堆經(jīng)常會(huì)出現(xiàn)兩種類(lèi)型的問(wèn)題:1.釋放或改寫(xiě)仍在使用的內(nèi)存(稱為:“內(nèi)存損壞”)。2.未釋放不再使用的內(nèi)存(稱為:“內(nèi)存泄露”)。這是最難被調(diào)試發(fā)現(xiàn)的問(wèn)題之一2013-09-09

