C語言static關鍵字

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();
}
相關文章
相關標籤/搜索