C語言入門篇--關(guān)鍵字static詳解
1.修飾局部變量
1.1作用
ststic修飾局部變量,會改變局部變量的生命周期,不改變作用域:
生命周期:和全局變量一樣具有全局性,但在內(nèi)存中的位置沒有改變,還在在靜態(tài)存儲區(qū)中。
作用域:作用域不改變。
注意:靜態(tài)局部變量的初始化在整個變量定義時只會進(jìn)行一次。
1.2舉例
(1)不加static
#include <stdio.h> Show() { int j = 0; j++; printf("j=%d\n", j); } int main() { int i = 0; for (i = 0; i < 10; i++) { Show(); } return 0; }
(2)加static
#include <stdio.h> Show() { static int j = 0;//生命周期變?yōu)槿值模? j++; printf("j=%d\n", j); } int main() { int i = 0; for (i = 0; i < 10; i++) { Show(); } return 0; }
(3)靜態(tài)局部變量的初始化只會進(jìn)行一次
#include <stdio.h> Show() { static int j = 0; j = 3; j++; printf("j=%d\n", j); } int main() { int i = 0; for (i = 0; i < 10; i++) { Show(); } return 0; }
2.修飾全局變量
2.1作用
static修飾全局變量,表示全局變量只在本文件內(nèi)有效,取消了全局變量的跨文件屬性。
2.2舉例
由于static對全局變量的作用在一個文件里體現(xiàn)不出來,固我們創(chuàng)建兩個文件,
在test1.c中通過extern引用外部變量g_vale,在test2.c中創(chuàng)建全局變量g_vale 。
(1)不加static
test1.c:
#include <stdio.h> extern int g_vale; int main() { printf("g_vale=%d\n", g_vale); return 0; }
test2.c:
#include <stdio.h> int g_vale = 100;//定義全局變量
編譯運(yùn)行:
(2)加static
test1.c
#include <stdio.h> extern int g_vale; int main() { printf("g_vale=%d\n", g_vale); return 0; }
test2.c
#include <stdio.h> static int g_vale = 100; //定義靜態(tài)全局變量
編譯運(yùn)行:運(yùn)行失敗,無法解析外部符號g_vale
3.修飾函數(shù)
3.1作用
static修飾函數(shù),和其修飾全局變量類似,表示函數(shù)只可在本文件內(nèi)調(diào)用使用,取消了函數(shù)的跨文件屬性。
3.2舉例
由于static對函數(shù)的作用在一個文件里體現(xiàn)不出來,固我們創(chuàng)建兩個文件,
在test1.c中通過extern引用外部函數(shù)Show( ),在test2.c中創(chuàng)建Show( )函數(shù)
(1)不加static
test1.c:
#include <stdio.h> extern Show();//也可以不寫聲明,文件在鏈接時也可以找到,但會出現(xiàn)Warning:Show()未定義 int main() { Show(); system("pause"); return 0; }
test2.c:
#include <stdio.h> void Show() { printf("This is Show()\n"); }
編譯運(yùn)行:
(2)加static
test1.c:
#include <stdio.h> extern Show(); int main() { Show(); system("pause"); return 0; }
test2.c:
#include <stdio.h> static void Show() { printf("This is Show()\n"); }
編譯運(yùn)行:運(yùn)行失敗,無法解析外部符號Show
以上就是C語言入門篇--關(guān)鍵字static詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言關(guān)鍵字static詳解的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Qt創(chuàng)建項目實(shí)戰(zhàn)之手把手創(chuàng)建第一個Qt項目
我們在進(jìn)行軟件開發(fā)學(xué)習(xí)時,有時候需要qt軟件進(jìn)行代碼的敲寫,下面這篇文章主要給大家介紹了關(guān)于Qt創(chuàng)建項目實(shí)戰(zhàn)之手把手創(chuàng)建第一個Qt項目的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04C語言深入刨析數(shù)據(jù)結(jié)構(gòu)之棧與鏈棧的設(shè)計與應(yīng)用
棧是限定僅在表尾進(jìn)行插入或刪除操作的線性表,表尾稱為棧頂(top),表頭稱為棧底(bottom)。棧的最主要特點(diǎn)就是“先進(jìn)后出”(FILO),或“后進(jìn)先出”(LIFO)。用鏈?zhǔn)酱鎯Y(jié)構(gòu)表示的棧稱為“鏈棧”,鏈棧對應(yīng)于鏈表2022-05-05visual?studio?將編譯后的dll等文件自動復(fù)制到指定目錄的方法
這篇文章主要介紹了visual?studio?將編譯后的dll等文件自動復(fù)制到指定目錄,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-03-03