static的用法
- static 改變了區域變數的生命周期,但不改變區域變數的作用域 生命周期變成了整個程式
- static 修飾全域變數 如果有外部宣告的全域變數不能在其他檔案中使用 修飾全域變數改變的是變數的可見性(只在當前檔案可以用)
- static 可以修飾函式 改變的是函式的可見性(只在定義檔案可以用)
區域變數和全域變數
區域變數通俗理解就是在花括號以內定義的變數,例如在main函式中定義的變數、函式中定義的變數,區域變數的作用域只在定義的花括號內,當花括號內部的程式執行完時,變數將被銷毀,
全域變數通俗理解就是在花括號以外定義的變數,例如和main函式同級定義的變數,全域變數的作用域是整個程式,當程式執行完時,變數將被銷毀,
這是不使用static
int a;//全域
void add()
{
int i = 0;
++i;
printf("%d", i);
}
int main()
{
int b;//區域
add();//1
add();//1
add();//1
return 0;
}
這是使用static定義區域變數,static改變了區域變數的生命周期,但不改變區域變數的作用域,生命周期變成了整個程式,
void add()
{
//static 改變了區域變數的生命周期,但不改變區域變數的作用域 生命周期變成了整個程式
static int i = 0;
++i;
printf("%d", i);
}
int main()
{
//int b;//區域
add();//1
add();//2
add();//3
return 0;
}
這是使用static定義全域變數不使用和使用的對比
不使用static
新建一個檔案
int j = 0;
主函式檔案
//關鍵詞extern引入外部變數
extern int j;
int main()
{
printf("%d", j);
return 0;
}
新建的檔案使用static,主函式是一樣的
static int j = 0;
結果:程式運行報錯,錯誤原因, error LNK2001: 無法決議的外部符號 _j
總結:static 修飾全域變數改變的是變數的可見性(只在當前檔案可以用),通俗的講如果有外部宣告的全域變數不能在其他檔案中使用 ,
static 可以修飾函式 改變的是函式的可見性(只在定義檔案可以用)
外部檔案
void sub()
{
printf("hello");
}
static void sub1()
{
printf("hello");
}
主函式
extern sub();
extern sub1();
int main()
{
sub();
/*sub1();*/
return 0;
}
函式sub是可以運行的,函式sub1運行會報錯,錯誤原因,error LNK2019: 無法決議的外部符號 _sub1,該符號在函式 _main 中被參考
總結:static 可以修飾函式 改變的是函式的可見性(只在定義檔案可以用)
面試題:
區域變數、區域靜態變數、全域變數、全域靜態變數的區別,
答:
區域變數和區域靜態變數 周期不一樣 作用域一樣
全域變數和全域靜態變數 周期一樣 作用域不一樣
區域變數和全域變數 周期不一樣 作用域不一樣
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/225842.html
標籤:java
上一篇:Java例外處理詳解(全文干貨,寫得非常全,值得收藏)
下一篇:java簡單練習-五子棋
