靜態(tài)變量是指內(nèi)存位置在程序執(zhí)行期間一直不改變的變量硼身,一個代碼塊內(nèi)部的靜態(tài)變量只能被這個代碼塊內(nèi)部訪問目木。
Static int I = 0店展;//定義了一個靜態(tài)變量
靜態(tài)變量在程序剛加載到內(nèi)存的時候就出現(xiàn)措近,所以和定義靜態(tài)變量的大括號無關(guān)父阻,一直到程序結(jié)束的時候才從內(nèi)存消失疗隶,同時靜態(tài)變量的值只初始化一次上忍。
-------------------------b.c中-------------------------
int b = 1;//b是全局變量怒见,在所有文件中都可以訪問
static int c = 2;//c只能在b.c這個文件內(nèi)部作為全局變量使用杆查,在其他文件中不能使用
int get_c()//這個函數(shù)是全局的
{
return c;
}//通過這個函數(shù)訪問c!
static void test(){
printf("b.c test\n");
}
void set_c(int n)
{
c = n;
}
-------------------------a.c中-------------------
#include <stdio.h>
int a = 0;
extern int b;
extern int c;//這里不影響搂抒,但取不到b.c中的c
void func()
{
a = 1;
}
int get_c();//聲明一個函數(shù)
void set_c(int n);
static void test(){
printf("a.c\n");
}
int main()
{
test();
func();
printf("%d\n",a);
printf("b = %d\n",b);
set_c(100)
printf("c = %d\n",get_c());
return 0;
}
gcc -o a a.c b.c執(zhí)行通過沒問題MР蟆!
1.因為全局變量的名字是不能相同的求晶,這樣會帶來一個什么問題焰雕?
因為一個項目往往是多個人寫的,每個人都定義自己的全局變量芳杏,最后代碼合并的時候會出錯矩屁。
但static的全局變量在不同的文件中名字是可以相同的
2.在C語言中函數(shù)默認都是全局的,使用關(guān)鍵字static可以將函數(shù)聲明為靜態(tài)爵赵,
函數(shù)定義為static就意味著這個函數(shù)只能在定義這個函數(shù)的文件中使用吝秕,
在其他文件中不能調(diào)用,即使在其他文件中聲明這個函數(shù)都沒用空幻。
對于不同文件中的staitc函數(shù)名字可以相同