日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

static--修饰(局部变量、全局变量、函数)

發布時間:2025/3/12 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 static--修饰(局部变量、全局变量、函数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章轉載鏈接:?https://blog.csdn.net/Payshent/article/details/70242965

在我們剛開始接觸接觸C語言的時候一定聽說過static關鍵字,在剛開始學習C語言的時候相信很多人都會對static感到記憶深刻,剛開始學的時候我也一臉懵逼,現在覺得時候做一個歸納整理了。static的用法也就下面幾點,?
1):static修飾局部變量?
2):static修飾全局變量?
3):static修飾函數

一、static修飾局部變量

普通的局部變量是在棧上進行分配的,局部變量所處的函數被多次調用時每次調用的位置都不一樣的。局部變量也可以在堆上進行動態的分配,但須記得釋放空間。?
靜態局部變量和普通局部變量區別如下:?
訪問權限:靜態局部變量只能被其作用域內的變量和函數進行訪問使用,它雖然存在與程序的整個生命周期,但由于是static的所以不能被其他函數和源文件訪問。?
作用位置:靜態局部變量被編譯器存放在全局存儲區(data),所以它雖然是局部的但是卻存在與整個生命周期。?
值:靜態的局部變量如果沒有被初始化,會自動被編譯器賦值為0,以后每次調用靜態局部變量就都會用上次調用的值(每次函數調用靜態局部變量都修改它然后離開,下次讀的時候從全局存儲區讀的靜態局部變量就是上次修改后的值)。?
注意:?
由于函數的每次調用,普通的局部變量都會重新分配,而靜態局部變量會保持上次調用的值不變。正是由于static局部變量的這種特性,使得靜態局部變量的函數變得不可重入,即每次調用可能會產生不同的結果,這在多線程編程時可能會成為一種隱患。

二、static修飾全局變量

說到靜態局部變量我們先來看看一個進程在內存中的布局:?

.text段(文本段)保存的是進程所執行的二進制文件,.data段(數據段)保存進程已經初始化的全局變量,.bss段保存進程未初始化的全局變量。在進程的整個生命周期中,.data段和.bss段內的數據是根整個進程同生共死的,也就是在進程結束之后這些數據才會壽終正寢。當一個進程的全局變量被聲明為static之后,靜態全局變量和其他全局變量在存儲位置并沒有區別,都是在.data段(已初始化)和.bss段(未初始化區),但它只在定義它的源文件內是有效的,在同一 程序的其他源文件內是不可見的,這就是靜態全局變量和普通全局變量的區別。

對static修飾的局部變量和全局變量還有疑問的話,可參照我的另一篇博客將靜態局部變量,靜態全局變量、局部變量、全局變量做的有詳細的說明:?
局部變量、全局變量、靜態局部變量、靜態全局變量?
(點擊可查看)。

三、static修飾函數

當一個程序中有很多源文件的時候,每個源文件可能會提供一些外界需要的接口,其他的函數可能是為了實現這些接口而編寫的,這些函數可能不希望被外界所看見就用static來修飾這個函數,這就是靜態函數。靜態函數有些類似與C++里面private函數。?
static函數可以很好的解決不同原文件中函數同名的問題,因為一個源文件中的static函數對其他文件來說是不可見的。

tatic函數與普通函數作用域不同,僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static修飾的函數),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件.?
static函數在內存中只有一份,普通函數在每個調用中都有一份拷貝

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的static--修饰(局部变量、全局变量、函数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。