回覆列表
  • 1 # 影片好笑

    static int a = 0; // 執行期時初始化一次, 下次再呼叫時, 不進行初始化工作如下:printf(“%d”,a);a++;}int main(){staticLocalVar(); // 第一次呼叫, 輸出a=0staticLocalVar(); // 第二次呼叫, 記憶了第一次退出時的值, 輸出a=1return 0;}擴充套件資料1、static對全域性變數的修飾,可以認為是限制了只能是本檔案引用此變數。有的程式是由好多.c檔案構成。彼此可以互相引用變數,但加入static修飾之後,只能被本檔案中函式引用此變數。2、static對棧變數的修飾,可以認為棧變數的生命週期延長到程式執行結束時。一般來說,棧變數的生命週期由OS管理,在退棧的過程中,棧變數的生命也就結束。3、但加入static修飾之後,變數已經不再儲存在棧中,而是和全域性變數一起儲存。同時,離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值。

  • 2 # 使用者8107137581681

    最主要有兩點用途。

    讓一個變數長期有效,而不管其是在什麼地方被申明。比如:

    int fun1()

    {

    static int s_value = 0;

    ....

    }

    那麼fun1不管在什麼地方被呼叫,當函式退出後,s_value最後的值將一直會被系統儲存(相當於一個全域性變數),下次s_value再被用到時,也即當fun1()再次被呼叫時,s_value初始值將是最近被儲存過的值(請注意s_value初始化操作只會被執行一次,即上述s_value =0 這個語句)。

    2.避免多個檔案使用了相同的變數名而導致衝突

     比如有多個檔案,分別由幾個人獨立開發的。假定他們在各自的檔案中定義相同的“全域性”變數名(僅僅指在他們獨自的檔案中全域性),當系統整合時,由於他們使用了名字一樣的“全域性”變數,導致有難於遇見的問題。解決這個問題方便的做法就是在各自檔案中,在相同的全域性變數申明前加上static修飾符。這樣系統就會為他們分配不同的記憶體,互不影響了。

  • 中秋節和大豐收的關聯?
  • 狐狸的品種有哪些?