文章目錄
-
目錄
前言
一、static是什么
二、static的用法
1.修飾局部變量
2.修飾全局變量
? ? ? ? ?3.修飾函數(shù)
總結(jié)
前言
? static在不同的語言中又有不同的使用方法,本文介紹的是static在C語言當中的用法。
一、static是什么
? static在C語言中是關(guān)鍵字,中文直譯過來是“靜態(tài)的”,static關(guān)鍵字在C語言中主要是用來修飾變量和函數(shù)。
二、static的用法
1.修飾局部變量
? ——稱為靜態(tài)局部變量
static修飾局部變量時,會改變局部變量的存儲位置,從而使得局部變量的生命周期變長。
? 我們用一段代碼來進行詳解:
void test()
{
int x = 0;
x++;
printf("%d ", x);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
? 這段代碼中每次調(diào)用test()函數(shù)時創(chuàng)建局部變量x賦值為0,每次局部變量x出了test()函數(shù)后都會自行銷毀。
? 所以可以很容易得到輸出結(jié)果為:1 1 1 1 1 1 1 1 1 1
? 接著我們用上static關(guān)鍵字來修飾test()函數(shù)中的局部變量x:
void test()
{
static int x = 0;
x++;
printf("%d ", x);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
? 輸出結(jié)果變成了:1 2 3 4 5 6 7 8 9 10
? 原因是static修飾了局部變量x,令局部變量x變成靜態(tài)的,使得每次test()函數(shù)結(jié)束時局部變量x都不銷毀,再次進入test()函數(shù)時則保留原有數(shù)值運行,因此x++數(shù)值越來越大。
其本質(zhì)是:
? 普通的局部變量創(chuàng)建后是放在棧區(qū)中,這種局部變量進入作用域時創(chuàng)建,出了作用域就銷毀;
? 但static修飾后的局部變量則放在靜態(tài)區(qū)中,它改變了局部變量的存儲位置,從而使得變量的生命周期延長,延長至程序結(jié)束才銷毀。
注意:static修飾局部變量只改變生命周期,不改變作用域!
2.修飾全局變量
? ——稱為靜態(tài)全局變量
? static修飾全局變量時,會改變?nèi)肿兞康?strong>鏈接屬性,從而使得全局變量的作用域變小。
? 這段話什么意思呢,先來簡單說說全局變量。
? 全局變量的作用域十分的廣,只要在一個源文件中定義后,這個程序中的所有源文件、對象以及函數(shù)都可以調(diào)用,生命周期更是貫穿整個程序。文件中的全局變量想要被另一個文件使用時就需要進行外部聲明(以下用extern關(guān)鍵字進行聲明)。
? 接著我們用代碼進行解析:
? 全局變量x在自己的文件內(nèi)可以直接使用。
? 但當全局變量在另一個文件內(nèi)未進行外部聲明就想直接用時會出現(xiàn)未定義的錯誤:
? ?此時只要使用extern關(guān)鍵字聲明一下即可:
? ?接著我們進入正題,當我們用static修飾全局變量x后:
?
?
? 會發(fā)現(xiàn)生成錯誤,無法解析外部符號x,全局變量x不能被test.c文件調(diào)用了。所以我們可以很容易看出static修飾后讓全局變量x的作用域變小了,令全局變量x無法被其他文件調(diào)用。
其本質(zhì)是:
? ??全局變量本身是具有外部鏈接屬性的,在A文件中定義的全局變量,在B文件中可以通過【鏈接】來使用;
? ? 但如果全局變量被static修飾,那這個外部鏈接屬性就會被修改成內(nèi)部鏈接屬性,此時這個全局變量就只能在自己的源文件中使用;
3.修飾函數(shù)
? ——稱為靜態(tài)函數(shù)
? static對函數(shù)的修飾與修飾全局變量十分相似,修飾函數(shù)時會改變函數(shù)的鏈接屬性,從而使得函數(shù)的作用域變小。
? 我們直接上代碼:
? 函數(shù)在另一個文件中使用時同樣需要聲明。
? 但當函數(shù)被static修飾后:
? 會發(fā)現(xiàn)Add函數(shù)無法被解析了,static修飾后Add函數(shù)的作用域變小了。
本質(zhì)和全局變量很像:
? 函數(shù)本身也是有外部鏈接屬性的;
??被static修飾后,函數(shù)的外部鏈接屬性被修改成內(nèi)部鏈接屬性,使得這個函數(shù)只能在自己的源文件內(nèi)被使用,因此函數(shù)的作用域就變小了。文章來源:http://www.zghlxwxcb.cn/news/detail-413181.html
總結(jié)
? 以上就是要說的內(nèi)容,本文僅僅簡單介紹了static在C語言的使用,static在其他語言中還有更多的使用方法。本文是小編的第一篇知識總結(jié),如有不足的地方歡迎大佬們在評論區(qū)指出。也還望各位覺得有用的話一鍵三連+關(guān)注,謝謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-413181.html
到了這里,關(guān)于【C語言】 Static關(guān)鍵字的用法和詳解(太細了!?。。┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!