c語言static的聲明
1) 在函數體,一個被聲明為靜態的變數在這一函數被調用過程中維持其值不變。
2) 在模塊內(但在函數體外),一個被聲明為靜態的變數可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變數。
3) 在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。
㈡ static在c語言中是什麼意思
寫在局部變數前面表示變數是靜態變數,函數調用結束後變數不回收。
寫在全局變數前面,表示靜態全局變數,該變數只能在本文件中訪問,不可以被其餘地方extern。
static 出現在不同的地方含義不同的。
如果是在函數之外使用,表示該對像在此文件中是全局可訪問的,在文件之外是不可訪問的。
如果出現在函數內部,則表示該變數不是自動變數,它是一個可以初始化的變數(如果不進行顯式初始化,默認值是0)。改變了它的值以後,函數結束時它的值也會保留。
(2)c語言static的聲明擴展閱讀:
static int n; //定義靜態全局變數改為int n; //定義全局變數
再次編譯運行程序,細心體會全局變數和靜態全局變數的區別。
全局變數是不顯式用static修飾的全局變數,全局變數默認是有外部鏈接性的,作用域是整個工程,在一個文件內定義的全局變數,在另一個文件中,通過extern 全局變數名的聲明,就可以使用全局變數。
全局靜態變數是顯式用static修飾的全局變數,作用域是聲明此變數所在的文件,其他的文件即使用extern聲明也不能使用。
㈢ C語言裡面靜態變數static是什麼作用啊
static關鍵字在C語言中用於聲明一個靜態的局部變數。
作用:
有時希望函數中的局部變數的值在函數調用結束後不消失而繼續保留原值,即其佔用的存儲單元不釋放,在下一次再調用該函數時,該變數已有值(就是上一次函數調用結束時的值)。這時就應該指定該局部變數為「靜態局部變數」,用關鍵字static進行聲明。
用靜態存儲要多佔內存(長期佔用不釋放,而不能像動態存儲那樣一個存儲單元可以先後為多個變數使用,節約內存),而且降低了程序的可讀性,因此若非必要,不要多用靜態局部變數。
㈣ static在c語言中是什麼意思
static在c語言中是「靜態」的意思,用於在函數中聲明「靜態變數」用,在每一次調用後,該變數並不在函數返回時立即釋放,變數中保存的值,可以保留到下一次調用時繼續有效。
㈤ C語言靜態變數問題
static變數
static聲明的變數為「靜態局部變數」,變數內容具有持久性。
該局部變數的值在函數調用結束之後不會消失,而仍然保留其原值。即它所佔用的存儲單元不釋放,在下一次調用該函數時,其局部變數的值仍然存在,也就是上一次函數調用結束時的值。
return m++
前置++是用之前就加1,用的人拿到的一定是新值;後置++是用完之後才加1,用的人拿到的是舊值.
m++中的加法確實做了,而且是在return之前做的,只不過返回值早就保存好了,而且是m在執行加法之前的值
綜述:
第1次:返回0,m變成1
第2次:返回1,m變成2
第3次:返回2,m變成3
第4次:返回3,m變成4
第5次:返回4,m變成5
望採納
㈥ c語言中static說明是什麼意思
在C語言中,static關鍵字的作用如下:
1、在修飾變數的時,static修飾的靜態局部變數只執行一次,而且延長了局部變數的生命周期,直到程序運行結束以後才釋放。
2、static修飾全局變數的時,這個全局變數只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。
3、static修飾一個函數,則這個函數的只能在本文件中調用,不能被其他文件調用。Static修飾的局部變數存放在全局數據區的靜態變數區。
(6)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(計算機高級語言)
㈦ c語言static函數不能聲明是什麼原因
如果只在當前的.c文件中使用,不會在別的.c文件中使用,此時在.c而不是.h文件中用static聲明;如果聲明的全局變數會在別的.c文件中使用,那麼將其聲明為extern的,並放在.h文件中。
語言特點
主要特點
C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大,依靠非常全面的運算符和多樣的數據類型。
可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。通過對C語言進行研究分析,總結出其主要特點如下:
(1)簡潔的語言
C語言包含的各種控制語句僅有9種,關鍵字也只有32個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。實際上,語句構成與硬體有關聯的較少。
且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。
(2)具有結構化的控制語句
C語言是一種結構化的語言,提供的控制語句具有結構化特徵,如for語句、if...else語句和switch語句等。可以用於實現函數的邏輯控制,方便麵向過程的程序設計。
以上內容參考:網路-C語言
㈧ c語言static聲明變數的疑問
在其他大佬的基礎上稍微補充一下吧。題目明確也提到了,這個變數可以在本文件中使用。我就不列舉static的所有用途了,只說一下這里static的意思,就是像題目中明確提到的一樣,它可以在本文件使用,但是題目沒突出的重點是,它只能在本文件使用。也就是說,它無法在別的文件中通過extern聲明去使用,同時也意味著,它和其他文件中同名變數不沖突。不管是普通全局變數還是靜態全局變數,都是在程序第一行代碼執行前就存在,在程序代碼推出後才銷毀。所以普通全局變數和靜態全局變數的區別不在於運行期,而在於編譯期間。
稍微擴展一下話題,你應該知道,C程序要經歷預處理,編譯,鏈接,就可以得到可執行程序。在編譯階段,是每個C文件生成一個二進制文件,每個變數或者函數都會被生成得到一個符號。然後在鏈接階段,從main函數開始,遞歸查找,把所有被使用到的符號鏈接起來。有些文件所使用的符號並不在本文件定義,所以需要查找,最常見的就是一個文件使用另一個文件的函數。
所謂符號,其實就是一個名字,這個名字標記了這個對象的最終所在。既然是名字,就有命名規則。普通全局變數,從這個角度來講,就是定義它和引用它的文件都會去按照命名規則使用同一個符號名字,因此可以被其他文件使用。static全局變數,會使用另外的命名規則來生成符號,以至於別的文件在鏈接階段無法識別到它的存在,因此無法被別的文件使用。所以你會發現,當你的代碼如果出現了類似的錯誤,產生的是鏈接錯誤Lxxx,而不是編譯錯誤Cxxx
㈨ C語言函數聲明static void clrpchist __P((void));是什麼意思
static void clrpchist __P((void));
此句是申明了一個名為lrpchist __P的函數,函數無返回值,無參數,static修飾表示此函數只能在當前文件被調用,不能被其它.c文件中被調用。
補充static用法:
在C中,static主要定義全局靜態變數、定義局部靜態變數、定義靜態函數。
1. 定義全局靜態變數:
在全局變數前面加上關鍵字static,該全局變數變成了全局靜態變數。全局靜態變數有以下特點。
a.在全局區分配內存。
b.如果沒有初始化,其默認值為0.
c.該變數在本文件內從定義開始到文件結束可見。
2. 定義局部靜態變數:
在局部變數前面加上關鍵字static,其特點如下:
a.該變數在全局數據區分配內存。
b.它始終駐留在全局數據區,直到程序運行結束。
c. 其作用域為局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束。
3. 定義靜態函數:
在函數返回類型前加上static關鍵字,函數即被定義為靜態函數,其特點如下:
a.靜態函數只能在本源文件中使用
b.在文件作用域中聲明的inline函數默認為static類型
㈩ C語言中static是做什麼用的
有兩種用法:
1、static修飾局部變數,成為一個局部靜態變數。
static修飾局部變數(靜態局部變數)與普通局部變數相比,它的優勢在於:
①靜態局部變數作用域與連接屬性與普通局部變數一樣;
②存儲類:靜態局部變數分配在data/bss段,普通局部變數在棧上;
③生命周期:因為存儲類的不同,靜態局部變數的生命周期得到延長了,直到程序結束。
2、static修飾全局變數與函數,成為靜態全局變數與靜態函數。
static修飾全局變數函數 與 普通全局變數普通函數相比,它的優勢在於:
①存儲類、生命周期、作用域都一樣;
②差別在於static修飾全局變數函數連接屬性是內連接,普通全局變數普通函數是外鏈接;
③就是說static修飾全局變數函數不能跨文件訪問調用。
(10)c語言static的聲明擴展閱讀:
在類內數據成員的聲明前加上static關鍵字,該數據成員就是類內的靜態數據成員。其特點如下:
靜態數據成員存儲在全局數據區,靜態數據成員在定義時分配存儲空間,所以不能在類聲明中定義
靜態數據成員是類的成員,無論定義了多少個類的對象,靜態數據成員的拷貝只有一個,且對該類的所有對象可見。也就是說任一對象都可以對靜態數據成員進行操作。而對於非靜態數據成員,每個對象都有自己的一份拷貝。
由於上面的原因,靜態數據成員不屬於任何對象,在沒有類的實例時其作用域就可見,在沒有任何對象時,就可以進行操作
和普通數據成員一樣,靜態數據成員也遵從public, protected, private訪問規則
靜態數據成員的初始化格式:<數據類型><類名>::<靜態數據成員名>=<值>
類的靜態數據成員有兩種訪問方式:<類對象名>.<靜態數據成員名> 或 <類類型名>::<靜態數據成員名>