臨汾市建設(shè)局網(wǎng)站app推廣接單
關(guān)鍵字static
????????在C語(yǔ)言中:
????????????????static是用來(lái)修飾變量和函數(shù)的
??????? static主要作用為:
????????
1. 修飾局部變量-靜態(tài)局部變量2. 修飾全局變量-靜態(tài)全局變量3. 修飾函數(shù)-靜態(tài)函數(shù)
??????? 在講解靜態(tài)變量之前,我們應(yīng)該了解靜態(tài)變量和其他變量的區(qū)別:
修飾局部變量
?? //代碼1
#include <stdio.h>
void test()
{int i = 0;i++;printf("%d ", i);
}
int main()
{int i = 0;for(i=0; i<10; i++){test();}return 0;
}
運(yùn)行結(jié)果:
????????
?調(diào)用靜態(tài)變量static
//代碼2
#include <stdio.h>
void test()
{//static修飾局部變量static int i = 0;i++;printf("%d ", i);
}
int main()
{int i = 0;for(i=0; i<10; i++){test();}return 0;
}
運(yùn)行結(jié)果:
????????
?對(duì)比代碼1和代碼2的效果理解static修飾局部變量的意義.
?結(jié)論:???????
????????static修飾局部變量改變了變量的生命周期,讓靜態(tài)局部變量出了作用域依然存在,到程序結(jié)束,生命周期才結(jié)束。
修飾全局變量??
//add.c
int g_val = 2018;
? //代碼2
//add.c
extern int g_val;
//test.c
int main()
{printf("%d\n", g_val);return 0;
}
代碼執(zhí)行:
????????
當(dāng)給int g_val添加static靜態(tài)變量進(jìn)行修飾后,發(fā)生報(bào)錯(cuò)
代碼執(zhí)行:
? 結(jié)論:
??????? 全局變量本身是具有外部鏈接屬性的
??????? 在A文件中定義的變量,在B文件中可以通過(guò)【鏈接】使用
??????? 但如果全局變量被static修飾后,這個(gè)外部鏈接屬性就變成了內(nèi)部鏈接屬性,這個(gè)全局變量只能在本身源文件內(nèi)使用
??????? static可以把外部鏈接屬性,變成內(nèi)部鏈接屬性,使得全局變量作用域變小
修飾函數(shù)
????????
?
結(jié)論:
??????? 函數(shù)本身是具有外部鏈接屬性的
??????? 被static修飾后,外部鏈接屬性變成了內(nèi)部鏈接屬性
??????? 使得這個(gè)函數(shù)只能在自己所在的源文件內(nèi)部使用,其他源文件無(wú)法鏈接使用