C語言之詳解靜態(tài)變量static
關(guān)鍵字static
在C語言中:
static是用來修飾變量和函數(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文件中可以通過【鏈接】使用
但如果全局變量被static修飾后,這個(gè)外部鏈接屬性就變成了內(nèi)部鏈接屬性,這個(gè)全局變量只能在本身源文件內(nèi)使用
static可以把外部鏈接屬性,變成內(nèi)部鏈接屬性,使得全局變量作用域變小
修飾函數(shù)


結(jié)論:
函數(shù)本身是具有外部鏈接屬性的
被static修飾后,外部鏈接屬性變成了內(nèi)部鏈接屬性
使得這個(gè)函數(shù)只能在自己所在的源文件內(nèi)部使用,其他源文件無法鏈接使用
到此這篇關(guān)于C語言之詳解靜態(tài)變量static的文章就介紹到這了,更多相關(guān)C語言staiic詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++簡(jiǎn)單實(shí)現(xiàn)與分析二叉搜索樹流程
二叉搜索樹作為一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時(shí)查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹的C++實(shí)現(xiàn),需要的可以參考一下2022-08-08
C++Node類Cartographer開始軌跡的處理深度詳解
這篇文章主要介紹了C++Node類Cartographer開始軌跡的處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03
opencv3/C++ 使用Tracker實(shí)現(xiàn)簡(jiǎn)單目標(biāo)跟蹤
今天小編就為大家分享一篇opencv3/C++ 使用Tracker實(shí)現(xiàn)簡(jiǎn)單目標(biāo)跟蹤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12

