c語言中為什麼要用static宣告變數。它的具體作用是什麼,請舉例說明

時間 2022-01-12 22:49:06

1樓:匿名使用者

比如你在乙個函式中定義了乙個i,

你想在每次呼叫的時候,顯示了共呼叫了多少次,而且你又不想用全域性變數,

那麼你就要定義成static型別的。

如果你實現了我說的功能,那你就可以理解static的作用了。

2樓:匿名使用者

如果static申明的是全域性變數,那麼這個全域性變數只能在這個編譯單元(檔案)使用,利於模組封裝。

如果static申明的是區域性變數,那麼函式返回時將不會釋放該變數空間。

例如,main.c裡面定義了乙個全域性變數static int a;那麼另外乙個檔案code.c將不能使用它,即使使用extern int a來申明它。

定義乙個函式void func() 那麼每次執行該函式a+1,即第一次呼叫func,a為1,第二次為2,第三次為3……和全域性變數很像,但其他函式是不能使用a 的

3樓:

//靜態變數的生存期是整個程式的執行期,它被定義後就一直存在,要保留某個函式的中間結果,就可以用靜態變數,比如下面這個程式

#include

int f()

int main()

1 2 3 4 請按任意鍵繼續. . .

c語言中由static 定義的變數的作用範圍

4樓:匿名使用者

作用於整個程式中,相當於全域性變數 ,不過它可以定義在程式的任何地方,比如函式內,只要變數前加了 static ,這部分變數對應的記憶體就不會被**,直到程式結束。

5樓:

作用於整個程式中,屬於全域性變數

6樓:

static有兩個用途:1.在函式中用來定義變數時,使這個變數變為乙個靜太分配的變數,也即函式呼叫結束後該變數仍然存在,並且他只會初始化一次,且這個初始化是在編譯階段完成的.

2.在函式外用來定義變數時他會使得這個變數只在該檔案中可見,也即其他檔案是無法訪問的,哪怕加了extern!

c語言中static說明是什麼意思?

7樓:鏡神白羊

static 用來說明靜態變數。

1、如果是在函式外面定義的,那麼其效果和全域性變數類似,即static說明的變數可以在當前c程式檔案中使用。

2、如果是在函式內部定義的,那麼這個變數只初始化一次,即使再次呼叫這個函式,這個static變數也不會再次被初始化,於是,這個變數的取值就會一直儲存著,我們再次呼叫該函式時,仍是儲存的上一次函式呼叫時儲存的結果。

8樓:匿名使用者

是用來說明靜態變數,一旦被宣告就不在被初始化,你試下在外部定義,然後就在函式裡用,然後在另乙個函式裡面用,這個變數就好像在共享的使用的感覺,呵呵,有同感吧?…

9樓:匿名使用者

說明某個變數,或者函式是靜態的,是全域性不變的那種,

c語言裡面靜態變數static是什麼作用啊?

10樓:匿名使用者

靜態資料區的變數只能初始化一次,所以

static int isum=3;

這條語句只會在第一次呼叫函式的時候生效,第二次會被忽略。

11樓:匿名使用者

static關鍵字在c語言中用於宣告乙個靜態的區域性變數。

作用:有時希望函式中的區域性變數的值在函式呼叫結束後不消失而繼續保留原值,即其占用的儲存單元不釋放,在下一次再呼叫該函式時,該變數已有值(就是上一次函式呼叫結束時的值)。這時就應該指定該區域性變數為「靜態區域性變數」,用關鍵字static進行宣告。

用靜態儲存要多佔記憶體(長期占用不釋放,而不能像動態儲存那樣乙個儲存單元可以先後為多個變數使用,節約記憶體),而且降低了程式的可讀性,因此若非必要,不要多用靜態區域性變數。

c語言中static函式的具體作用是什麼?

12樓:李圈兒兒

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

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

c語言裡面的靜態函式和函式的區別是:

靜態函式是函式的一種,函式包括靜態函式和非靜態函式兩種。

靜態函式是有static修飾的函式,如果沒有,則為非靜態函式(全域性函式)。

當整個程式只有乙個c檔案時,二者沒有區別,當程式是由多個c檔案組成時,二者的作用域,即可使用的範圍不同。

靜態函式(帶static的),只能在本檔案中使用,無法跨檔案,而非靜態函式(不帶static的),可以在任何乙個檔案中使用。當在其它檔案中使用時,需要做函式宣告後再使用。

c語言中static是做什麼用的?

13樓:匿名使用者

最主要有兩點用途。

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

int fun1()

static int s_value = 0;

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

2.避免多個檔案使用了相同的變數名而導致衝突比如有多個檔案,分別由幾個人獨立開發的。假定他們在各自的檔案中定義相同的「全域性」變數名(僅僅指在他們獨自的檔案中全域性),當系統整合時,由於他們使用了名字一樣的「全域性」變數,導致有難於遇見的問題。

解決這個問題方便的做法就是在各自檔案中,在相同的全域性變數申明前加上static修飾符。這樣系統就會為他們分配不同的記憶體,互不影響了。

14樓:匿名使用者

這個應該是個靜態儲存,在一次迴圈之後,帶入的值是不會被釋放的,也就是說第一次迴圈結果是多少第二次迴圈還是多少,不會變成題目初始值。

15樓:匿名使用者

在程式最開始處main()之前定義的的變數為全域性變數,存放在記憶體中的資料區,在與該程式有關的所有檔案都可以使用該變數,但是若是其他地方的變數 加了個static 也變為全域性變數,宣告週期跟main()之前定義的一樣長,也在資料區存放,但是唯一的差別就是該變數只能這個檔案中使用,其他沒有差別。

16樓:一騎當後

在c語言中,static的作用有三個,分別如下:

1、隱藏;

當同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。

2、保持變數內容的持久;

儲存在靜態資料區的變數會在程式剛開始執行時就完成初 始化,也是唯一的一次初始化。

3、預設初始化為0;

在靜態資料區,記憶體中所有的位元組預設值都是0x00,某些 時候這一特點可以減少程式設計師的工作量。

17樓:匿名使用者

static和extern定義的變數都是在靜態儲存區分配儲存單元的。在c語言中可以同時建立多個檔案,可將不讓其他檔案引用的本檔案中的全域性變數都加上static,成為靜態全域性變數,對其他檔案遮蔽起來,而extern的功能剛好相反。

詳細的功能可以參考c課本的作用域與儲存型別。

18樓:

宣告靜態區域性變數。

有時候希望函式中的區域性變數的值在函式呼叫結束後不消失而保留原值,即其占用的儲存單元不釋放,在下次該函式呼叫時,該變數保留上一次函式呼叫結束時的值。這時就應該指定區域性變數為靜態區域性變數,例子如下:

#include

using namespace std;

int f(int a )

int main()

執行結果為

7 8 9

c語言 static 作用範圍是什麼呢?

19樓:

static的作用有三條。

一、第乙個作用:隱藏。

當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。

你可能會問:為什麼在a.c中定義的全域性變數a和函式msg能在main.

c中使用?前面說過,所有未加static字首的全域性變數和函式都具有全域性可見性,其它的原始檔也能訪問。此例中,a是全域性變數,msg是函式,並且都沒有加static字首,因此對於另外的原始檔main.

c是可見的。

如果加了static,就會對其它原始檔隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。

利用這一特性可以在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。static可以用作函式和變數的字首,對於函式來講,static的作用僅限於隱藏,而對於變數,static還有下面兩個作用。

二、static的第二個作用是保持變數內容的持久。

儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化。共有兩種變數儲存在靜態儲存區:全域性變數和static變數,只不過和全域性變數比起來,static可以控制變數的可見範圍,說到底static還是用來隱藏的。

三、static的第三個作用是預設初始化為0。

其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00,某些時候這一特點可以減少程式設計師的工作量。

請新增詳細解釋

20樓:匿名使用者

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。

(1)第乙個作用:隱藏。

當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.

c,另乙個是main.c。

下面是a.c的內容

#include增加這條語句

char a = 『a『; // global variable

void msg()

你可能會問:為什麼在a.c中定義的全域性變數a和函式msg能在main.

c中使用?前面說過,所有未加static字首的全域性變數和函式都具有全域性可見性,其它的原始檔也能訪問。此例中,a是全域性變數,msg是函式,並且都沒有加static字首,因此對於另外的原始檔main.

c是可見的。

如果加了static,就會對其它原始檔隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。

利用這一特性可以在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。static可以用作函式和變數的字首,對於函式來講,static的作用僅限於隱藏,而對於變數,static還有下面兩個作用。

(2)static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化。共有兩種變數儲存在靜態儲存區:

全域性變數和static變數,只不過和全域性變數比起來,static可以控制變數的可見範圍,說到底static還是用來隱藏的。

(3)static的第三個作用是預設初始化為0。其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00,某些時候這一特點可以減少程式設計師的工作量。

最後對static的三條作用做一句話總結。首先static的最主要功能是隱藏,其次因為static變數存放在靜態儲存區,所以它具備永續性和預設值0。

下面是main.c的內容

除了標頭檔案,需要宣告函式:void msg();

int main(void)

C語言中位址為什麼不能相加,C語言指標變數為什麼不能相加

實體地址 有效位址 偏移位址 並不是兩個數簡單的相加減 指標變數是有加減運算的,但是要注意以下幾點 1.指標變數中存放的是位址值,也就是乙個數字位址,例如某指標變數中的值是0x20000000,表示表示此指標變數存放的是記憶體中位於0x20000000地方的記憶體位址。指標變數可以加減,但是只能與整...

c語言中pulu都有什麼用處,C語言中 p, u, lu都有什麼用處

這些都是輸入輸出的格式控制,比如 d表示後面的輸出型別為有符號的10進製整形,u表示無符號10進製整型,lu表示輸出無符號長整型整數 c語言 格式控制字元 p是pointer 指標縮寫 u是unsigned 無符號的 縮寫無正負號 1.p會把值作為乙個位址輸出。2.u對int型和unsigned i...

c語言中rta各什麼意思,c語言中 t r n 和空格都是什麼意思啊?

r 回車 cr t 水平製表 ht a 響鈴 bel 所有的ascii碼都可以用 加數字 一般是8進製數字 來表示。而c中定義了一些字母前加 來表示常見的那些不能顯示的ascii字元,如 0,t,n等,就稱為轉義字元,因為後面的字元,都不是它本來的ascii字元意思了。所有轉義字元及意義 r意思是回...

c語言中符號ltlt是什麼意思,c語言中符號 是什麼意思

聽不清啊 c語言中符號 是左移運算子。左移運算子,是乙個計算機用語。用來將乙個數的各二進位制位全部左移若干位。例如 將a的二進位制數左移2位,右補0。若a 15,即二進位制數00001111,左移2位得00111100,即十進位制數60 為簡單起見,用8位二進位制數表示十進位制數15,如果用16位二...

c語言 中括號都有什麼作用,c語言中的中括號有什麼作用?

字串的型別是元素為char的陣列,因此可以直接對字串使用陣列的下標運算子 雖然語法看起來略奇葩 好像你的程式有點問題,陣列中的變數是確定值,因為記憶體中,陣列的分配是連續的,所以,buf是陣列名,變數i是迴圈體語句中的確定值i,for語句控制迴圈次數20次,即i 0時間buf 0 012345678...