C static 關鍵字理解

來源:互聯網
上載者:User

標籤:blog   使用   os   io   strong   檔案   for   資料   

今天來看一下這麼一個程式。

#include<stdio.h>int count =1;int fun(void){static int count =10;return count--;}int main(void){printf("global\t\tlocalstatic\n");for(;count<=10;count++)printf("%d\t\t%d\n",count,fun());return 0;}

 運行結果如下

global          localstatic1               102               93               84               75               66               57               48               39               210              1

如果你理解了上面的程式,下面的文章就不用看了,否則請繼續:

static在c裡面可以用來修飾變數,也可以用來修飾函數。

變數在c裡面可分為存在資料區、棧和堆.
static對全域變數的修飾,可以認為是限制了只能是本檔案引用此變數。有的程式是由好多.c檔案構成。彼此可以互相引用變數,但加入static修飾之後,只能被本檔案中函數引用此變數。
static對棧變數的修飾,可以認為棧變數的生命週期延長到程式執行結束時。一般來說,棧變數的生命週期由OS管理,在退棧的過程中,棧變數的生命也就結束了。但加入static修飾之後,變數已經不再儲存在棧中,而是和全域變數一起儲存。同時,離開定義它的函數後不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且儲存了前次被調用後留下的值。
static對函數的修飾與對全域變數的修飾相似,只能被本檔案中的函數調用,而不能被同一程式其它檔案中的函數調用。

如此一來上面的程式就不難理解了吧。

但是我還是不特別明白,同樣放在資料區的兩個同名變數(如上例中的count)是如何管理的。技術不到家,腦袋大大的呦。。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.