Ⅰ c語言中static的作用和用法
static關鍵字不僅可以用來修飾變數,還可以用來修飾函數。在使用 static 關鍵字修飾變數時,我們稱此變數為靜態變數。靜態變數的存儲方式與全局變數一樣,都是靜態存儲方式。靜態變數屬於靜態存儲方式,屬於靜態存儲方式的變數卻不一定就是靜態變數。
在C語言中,static關鍵字的作用如下:
在修飾變數的時,static修飾的靜態局部變數只執行一次,而且延長了局部變數的生命周期,讓仔閉直到程序運行結束以後才釋放。
static修飾全局變數的時,這個全局變數只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。
static修飾一個函數,則這個函數的只能在本文件中調用,不能被其他文件調用。Static修飾的局部變數存放在全局數據區的靜態變數區。
C++的static用法:
面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變數和函數,不涉及類;後者主要說明static在類中的作用。
在類中,static可以用來修飾靜態數據成員和靜態成員方法。
靜態數據成員:
靜態數據成員可以實現多個對象之間的數據共戚數享,它坦裂是類的所有對象的共享成員,它在內存中只佔一份空間,如果改變它的值,則各對象中這個數據成員的值都被改變。
靜態數據成員是在程序開始運行時被分配空間,到程序結束之後才釋放,只要類中指定了靜態數據成員,即使不定義對象,也會為靜態數據成員分配空間。
靜態數據成員既可以通過對象名引用,也可以通過類名引用。
靜態成員函數:
靜態成員函數和靜態數據成員一樣,他們都屬於類的靜態成員,而不是對象成員。
非靜態成員函數有this指針,而靜態成員函數沒有this指針。
靜態成員函數主要用來方位靜態數據成員而不能訪問非靜態成員。
Ⅱ C語言編程中「static」是什麼意思
1) 在函數體,一個被聲明為靜態的變數在這一函數被調用過程中維持其值不變。
2) 在模塊內(但在函數體外),一個被聲明為靜態的變數可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變數。
3) 在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。
Ⅲ 在C語言中static有什麼含義
最主要有兩點用途。
讓一個變數長期有效,而不管其是在什麼地方被申明。比如:
int fun1()
{
static int s_value = 0;
....
}
那麼fun1不管在什麼地方被調用,當函數退出後,s_value最後的值將一直會被系統保存(相當於一個全局變數),下次s_value再被用到時,也即當fun1()再次被調用時,s_value初始值將是最近被保存過的值(請注意s_value初始化操作只會被執行一次,即上述s_value =0 這個語句)。
2.避免多個文件使用了相同的變數名而導致沖突
比如有多個文件,分別由幾個人獨立開發的。假定他們在各自的文件中定義相同的「全局」變數名(僅僅指在他們獨自的文件中全局),當系統集成時,由於他們使用了名字一樣的「全局」變數,導致有難於遇見的問題。解決這個問題方便的做法就是在各自文件中,在相同的全局變數申明前加上static修飾符。這樣系統就會為他們分配不同的內存,互不影響了。
Ⅳ C語言中static是做什麼用的
有兩種用法:
1、static修飾局部變數,成為一個局部靜態變數。
static修飾局部變數(靜態局部變數)與普通局部變數相比,它的優勢在於:
①靜態局部變數作用域與連接屬性與普通局部變數一樣;
②存儲類:靜態局部變數分配在data/bss段,普通局部變數在棧上;
③生命周期:因為存儲類的不同,靜態局部變數的生命周期得到延長了,直到程序結束。
2、static修飾全局變數與函數,成為靜態全局變數與靜態函數。
static修飾全局變數函數 與 普通全局變數普通函數相比,它的優勢在於:
①存儲類、生命周期、作用域都一樣;
②差別在於static修飾全局變數函數連接屬性是內連接,普通全局變數普通函數是外鏈接;
③就是說static修飾全局變數函數不能跨文件訪問調用。
(4)c語言static是什麼意思及用法擴展閱讀:
在類內數據成員的聲明前加上static關鍵字,該數據成員就是類內的靜態數據成員。其特點如下:
靜態數據成員存儲在全局數據區,靜態數據成員在定義時分配存儲空間,所以不能在類聲明中定義
靜態數據成員是類的成員,無論定義了多少個類的對象,靜態數據成員的拷貝只有一個,且對該類的所有對象可見。也就是說任一對象都可以對靜態數據成員進行操作。而對於非靜態數據成員,每個對象都有自己的一份拷貝。
由於上面的原因,靜態數據成員不屬於任何對象,在沒有類的實例時其作用域就可見,在沒有任何對象時,就可以進行操作
和普通數據成員一樣,靜態數據成員也遵從public, protected, private訪問規則
靜態數據成員的初始化格式:<數據類型><類名>::<靜態數據成員名>=<值>
類的靜態數據成員有兩種訪問方式:<類對象名>.<靜態數據成員名> 或 <類類型名>::<靜態數據成員名>
Ⅳ static在c語言中是什麼意思
寫在局部變數前面表示變數是靜態變數,函數調用結束後變數不回收。
寫在全局變數前面,表示靜態全局變數,該變數只能在本文件中訪問,不可以被其餘地方extern。
static 出現在不同的地方含義不同的。
如果是在函數之外使用,表示該對像在此文件中是全局可訪問的,在文件之外是不可訪問的。
如果出現在函數內部,則表示該變數不是自動變數,它是一個可以初始化的變數(如果不進行顯式初始化,默認值是0)。改變了它的值以後,函數結束時它的值也會保留。
(5)c語言static是什麼意思及用法擴展閱讀:
static int n; //定義靜態全局變數改為int n; //定義全局變數
再次編譯運行程序,細心體會全局變數和靜態全局變數的區別。
全局變數是不顯式用static修飾的全局變數,全局變數默認是有外部鏈接性的,作用域是整個工程,在一個文件內定義的全局變數,在另一個文件中,通過extern 全局變數名的聲明,就可以使用全局變數。
全局靜態變數是顯式用static修飾的全局變數,作用域是聲明此變數所在的文件,其他的文件即使用extern聲明也不能使用。
Ⅵ Static是什麼意思啊,在C程序裡面
static可應用於應用於內部變數、外部變數和函數。應用於內部變數時,其作用是用來指定變數的存儲類別為靜態變數。應用於外部變數和函數時,其作用是限制變數或函數的作用范圍僅限於外部變數或函數所在的源文件。
1、在整個程序運行的過程中,無論靜態內部變數所在的函數被調用了多少次,靜態內部變數只運行一次初始化,即在程序運行時完成的。
2、在函數的兩次調用期間,靜態內部變數所在存儲單元不被釋放,因而當前次函數調用執行時其值會被保存下來,下次調用時該值依然存在。即靜態內部變數的值在從一次函數調用到下一次函數調用到下一次函數調用到下一次函數調用之間保持不變。
3、 默認情況下,外部變數的作用域是從定義變數的位置到所在源文件的末尾。
一、函數分為內部函數和外部函數
當一個源程序由多個源文件組成時,C語言根據函數能否被其它源文件中的函數調用,將函數分為內部函數和外部函數。
1、內部函數(又稱靜態函數)
如果在一個源文件中定義的函數,只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用,這種函數稱為內部函數。
定義一個內部函數,只需在函數類型前再加一個「static」關鍵字即可,如下所示:
static 函數類型 函數名(函數參數表){……}
關鍵字「static」,譯成中文就是「靜態的」,所以內部函數又稱靜態函數。但此處「static」的含義不是指存儲方式,而是指對函數的作用域僅局限於本文件。
使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名,因為同名也沒有關系。
2、外部函數
外部函數的定義:在定義函數時,如果沒有加關鍵字「static」,或冠以關鍵字「extern」,表示此函數是外部函數:
[extern] 函數類型 函數名(函數參數表){……}
調用外部函數時,需要對其進行說明:
[extern] 函數類型 函數名(參數類型表)[,函數名2(參數類型表2)……];
二、C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括一些類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。
(6)c語言static是什麼意思及用法擴展閱讀:
static的作用
在C語言中,static的字面意思很容易把我們導入歧途,其實它的作用有三條。
1、最重要的一條:隱藏。
同時編譯多個文件時,所有未加static前綴的全局變數和函數都具有全局可見性。
加了static,就會對其它源文件隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。利用這一特性可以在不同的文件中定義同名函數和同名變數,而不必擔心命名沖突。Static可以用作函數和變數的前綴,對於函數來講,static的作用僅限於隱藏,而對於變數,static還有下面兩個作用。
2、static的第二個作用是保持變數內容的持久。存儲在靜態數據區的變數會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變數存儲在靜態存儲區:全局變數和static變數,只不過和全局變數比起來,static可以控制變數的可見范圍,說到底static還是用來隱藏的。
3、static的第三個作用是默認初始化為0。其實全局變數也具備這一屬性,因為全局變數也存儲在靜態數據區。在靜態數據區,內存中所有的位元組默認值都是0x00,某些時候這一特點可以減少程序員的工作量。比如初始化一個稀疏矩陣,我們可以一個一個地把所有元素都置0,然後把不是0的幾個元素賦值。
如果定義成靜態的,就省去了一開始置0的操作。再比如要把一個字元數組當字元串來用,但又覺得每次在字元數組末尾加』 』太麻煩。如果把字元串定義成靜態的,就省去了這個麻煩,因為那裡本來就是』 』。
最後對static的三條作用做一句話總結。首先static的最主要功能是隱藏,其次因為static變數存放在靜態存儲區,所以它具備持久性和默認值0。
參考資料來源:
網路-static函數
網路-c語言
Ⅶ c語言中static說明是什麼意思
在C語言中,static關鍵字的作用如下:
1、在修飾變數的時,static修飾的靜態局部變數只執行一次,而且延長了局部變數的生命周期,直到程序運行結束以後才釋放。
2、static修飾全局變數的時,這個全局變數只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。
3、static修飾一個函數,則這個函數的只能在本文件中調用,不能被其他文件調用。Static修飾的局部變數存放在全局數據區的靜態變數區。
(7)c語言static是什麼意思及用法擴展閱讀:
static關鍵字在C語言、C++、java中的作用有著相似之處,但也存在差異:
一、C++的static用法:
1、面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變數和函數,不涉及類;後者主要說明static在類中的作用。
2、在類中,static可以用來修飾靜態數據成員和靜態成員方法
靜態數據成員
(1)靜態數據成員可以實現多個對象之間的數據共享,它是類的所有對象的共享成員,它在內存中只佔一份空間,如果改變它的值,則各對象中這個數據成員的值都被改變。
(2)靜態數據成員是在程序開始運行時被分配空間,到程序結束之後才釋放,只要類中指定了靜態數據成員,即使不定義對象,也會為靜態數據成員分配空間。
(3)靜態數據成員既可以通過對象名引用,也可以通過類名引用。
靜態成員函數
(1)靜態成員函數和靜態數據成員一樣,他們都屬於類的靜態成員,而不是對象成員。
(2)非靜態成員函數有this指針,而靜態成員函數沒有this指針。
(3)靜態成員函數主要用來方位靜態數據成員而不能訪問非靜態成員。
二、java的static用法:
1、聲明為static的變數稱為靜態變數或類變數。可以直接通過類名引用靜態變數,也可以通過實例名來引用靜態變數,但最好採用前者,因為後者容易混淆靜態變數和一般變數。
2、聲明為static的方法稱為靜態方法或類方法。靜態方法可以直接調用靜態方法,訪問靜態變數,但是不能直接訪問實例變數和實例方法。靜態方法中不能使用this關鍵字,因為靜態方法不屬於任何一個實例。
參考資料來源:網路-static(計算機高級語言)