static關鍵字
1 .基本介紹
- static 關鍵字在C語言中比較經常使用,使用恰當可以大大提升程序的模塊化特性,有利於擴展和維護
2 . 局部變量使用static修飾
- 局部變量被static修飾後,咱們稱爲靜態局部變量
- 對應靜態局部變量在聲明時未賦初值,編譯器也會把它初始化爲0
- 靜態局部變量存儲於內存的靜態存儲區(全局性質),只會被初始化一次,即便函數返回,它的值也會保持不變
#include<stdio.h>
void main(){
static int n;
//n就是靜態局部變量,默認初始化爲0
printf("n=%d",n);
getchar();
}
void fn(void){
int n =10;//普通變量,每次執行都會初始化,n在棧區
printf("n=%d",n);
n++;
printf("n++=%d",n);
}
void fn_static(void){
static int n = 10;//靜態局部變量,放在靜態存儲區,全局性質空間
printf("static n=%d",n);
n++;
printf("n++=%d",n);
}
int main(void){
fn();
printf("---------------");
fn_static();
printf("----------------");
fn();
printf("-------------");
fn_static();
getchar();
return 0;
}
3 . 全局變量使用static修飾
- 普通全局變量對整個工程可見,其餘文件可使用extern外部聲明後直接使用,也就是說其餘文件不能再定義一個與其相同名字的變量了(不然編譯器會認爲他們是同一個變量),靜態全局變量僅對當前文件可見,其餘文件不可訪問,其餘文件能夠定義與其同名的變量,二者互不影響
- 定義不須要與其餘文件共享的全局變量時,加上static關鍵字可以有效的下降程序之間的耦合,避免不一樣文件變量名的衝突
#include<stdio.h>
//在一個文件中,使用另一個文件的全局變量,使用ertern引入便可
extern int num;
extern int num2;
int num =60;
void main(){
printf("num=%d num2=%d",num,num2);
getchar();
}
int num = 10;
//普通全局變量
static int num2 = 20;
//靜態全局變量,只能在本文件中使用,而不能在其餘文件使用
4 . 函數使用static修飾
- 函數的使用方式與全局變量相似,在函數的返回類型前加static,就是靜態函數
- 非靜態函數能夠在另外一個文件中經過extern引用
- 靜態函數只能在聲明它的文件中可見,其餘文件不能引用該函數
- 不一樣的文件可使用相同名字的靜態函數,互不影響
#include <stdio.h>
void fun1(void){
//普通函數
printf("hello from fun1");
}
static void fun2(void){
//靜態函數,它只能在本文件中使用
printf("hello from fun2");
}
#include<stdio.h>
extern void fun1(void);
extern void fun2(void);
void fun2(){
...
}
void main(){
fun1();
fun2();
getchar();
}