static和extern的用法

static

static是變量的一種屬性,表示靜態變量

生命週期:因爲靜態變量是存儲在程序靜態區,而程序的靜態區會隨着程序的開始而申請隨着程序的結束而回收,所以靜態變量的生命週期也就取決於當前程序的運行和結束時間


作用域:靜態變量的作用域取決於生命的位置,聲明全局變量時靜態變量的作用域在此文件內,聲明局部變量時靜態變量的作用域在聲明它的局部範圍內,等同於局部變量的作用域。

雖然靜態局部變量的作用域只在聲明它的局部範圍內,但它的生命週期卻等於整個程序的生命週期的,而且靜態變量只會聲明一次,所以就可以用來做一些很有意思的事

int main()
{
    void f1();
    for (int i = 0; i < 10; i++)
    {
        f1();
    }
    getchar();
    return 0;
}

void f1()
{
    static int m = 0;
    printf("%d\n", m++);
}

這裏寫圖片描述

可以看出雖然函數結束後靜態變量的作用域已經結束了,但生命週期仍然存在,而且靜態變量只會聲明一次,這樣靜態變量m隨着函數的調用就會形成一種累加的效果。



extern

跨文件訪問變量的時候需要用到extern表明我要使用的是其它文件中的變量,這樣就可以跨文件訪問變量了

//test.c


int num = 8;
//main.c
#include<stdio.h>
extern int num;

int main()
{
    printf("%d",num);
    getchar();
    return 0;
}

運行結果:
這裏寫圖片描述

可以看出在main.c文件中用關鍵字 ertern聲明 test.h 文件中的全局num變量後就可以直接在main.c文件中直接使用了。


因爲全局變量默認是可以多文件訪問的,如果我不想讓其它的文件訪問本文件中的全局變量可以使用static關鍵字將全局變量的作用域降級,使得它只能在當前文件中使用

//test.c
static int num = 45;
#include<stdio.h>

int main()
{
    extern int num;
    printf("%d",num);
    getchar();
    return 0;
}

這裏寫圖片描述


這樣就可以保證本文件中的變量不會被其它文件使用了。

發佈了49 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章