區域性靜態變數的可見性是怎樣的?

2025-03-27 13:30:04 字數 4314 閱讀 3101

1樓:匿名使用者

區域性靜態變數。

具有檔案作用域,全域性變數。

公用變數)具有全姿吵迅局作用域檔案作用域:從區域性靜態變數的跡此定義處碰蔽開始,一直到變數所在的檔案結束都是存在的。

區域性靜態變數 全域性靜態變數的區別

2樓:網友

作用域咯。

在函式外宣告的變數,其作用域是從宣告處到檔案結束,在這個區域內的每乙個函式都可以訪問這個變數。而在函式內宣告的變數,只有在這個函式之內才能訪問。

c語言區域性靜態變數怎樣在全域性範圍內修改其值

3樓:

區域性靜態變數,你可以理解為只能在作用域內部訪問的全域性變數。

所以你的想法是不可能實現的。

4樓:網友

為啥不定義全域性靜態變數。

c語言中靜態區域性變數的問題

5樓:網友

static 用修飾符來宣告的變數叫靜態變數。

這種變數和一般的變數不同。從程式開始到程式結束一直存在。

區域性靜態變數。是在函式內部宣告的靜態變數。

區域性靜態變數的值有乙個特性,它會儲存你操作的結果。

舉個例子:int test(int a)

當你第一次呼叫時 static int sum = 5;起作用。

int a1 = test(2);// a1 = 7 同時 sum = 7

當你第二次呼叫時 static int sum = 5;不起作用 sum = 7

int a2 = test(2);// a2 = 9 sum = 9

這是因為用static宣告的變數分配的位址不是在棧中。在完成第一次呼叫後,它仍然存在,並且有個值。第二次呼叫時,並不會再重新生成乙個變數,還會使用上一次函式完成時的值。

6樓:水晶扇

靜態區域性變數相當於全域性變數(只是只有在這個函式中能訪問,但是生命週期是和全域性變數差不多的),函式退出之後變數還在,而且只在第一次進入的時候做初始化,以後會跳過初始化語句,保留原來的值(也就是說,如果item是static的,那麼只有在第一次進入這個函式的時候會執行item=0,以後都不會執行。)。

7樓:網友

在函式內部static宣告的變數,在第一次呼叫函式的時候進行初始化,此後對此函式的呼叫,都使用第一次初始化話時的變數,對函式內部來說就像是使用全域性變數一樣,但靜態區域性變數只對宣告的函式可見。一般編寫底層應用的時候用的比較多。

8樓:網友

因為static的生命週期是要等到整個程式執行完才釋放的,而且當他被賦值一次時,在定義的地方是不會再重新給他賦值的。。。所以當你輸入的第一次88 88 88 55 有乙個小於60 時 item 就被賦值為1了,之後不管你輸入的是88 88 88 88 還是 99 99 99 99 之類的。。他都是 1 。

修改的方法是用以下的方法讓item重新賦值(如下):

static int item;

item = 0 ;

又或者可以不用sum

直接寫成:if(str[1]<60||str[2]<60||str[3]<60||str[4]<60)

item++;

printf("%d",item); // 注意:要把static int item 寫到while 迴圈的外面,不然這句會出錯。

9樓:匿名使用者

看看c primer plus第五版的第12章吧。

什麼是靜態變數,靜態變數=全域性變數,動態變數=區域性變數嗎??

10樓:中目黒雨椋

非也。動態區域性變數:靜態區域性變數在靜態儲存區內分配儲存單元。

在程式整個執行期間都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,儲存在動態儲存區空間(而不是靜態儲存區空間),函式呼叫結束後即釋放。

靜態區域性變數:靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。

靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。

動態全域性變數:全域性作用域,整個程式都可以使用。

靜態全域性變數:靜態全域性變數也具有全域性作用域,它與全域性變數的區別在於如果程式包含多個檔案的話,它作用於定義它的檔案裡,不能作用到其它檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同名字的靜態全域性變數,它們也是不同的變數。

11樓:別跟我講冷笑話

簡單來說,靜態變數就是乙個變數名稱前有static標註的比如說 static int a;

全域性變數等於靜態變數,他們的差別你可以簡單理解成在作用域上的差別,靜態變數是在乙個函式中的作用域(主函式就是主函式作用域,區域性函式就是區域性函式的作用域),而全域性函式是寫在主函式外的(非區域性函式中)空白處的變數,其生命期在主函式之前即產生,隨著主函式執行完資料再有系統**。

而動態變數與靜態變數的差別是。

例如void a()

void b()

動態變數就是,每一次呼叫完系統**記憶體,下一次呼叫再分配記憶體,而靜態變數的生命期會在主函式執行結束後記憶體才會被系統收回。

靜態區域性變數與全域性變數問題

12樓:網友

1、區域性變數是當前子程式中使用的變數,變數改變不影響除當前子程式外的程式,只能讓當前子程式使用。

2、全域性變數是指改變數能夠被當前程式所有子程式使用的變數。

13樓:網友

就算它不是靜態變數,return的值也是它,這就要看區域性變數的作用域了。

14樓:

從生存週期看,所有靜態和外部變數都是全域性變數。

從可見性看,外部變數是命名衝突可見性全程式可見,引用可見性自引用說明和定義以下可見。

說明以下,同名變數(識別符號)第二次定義稱為命名衝突,外部變數是真正的全域性變數。

整個程式不可有同名變數和函式。對於命名衝突外部變數是全程式可見。

引用可見性,指的是程式可以使用該變數(變數已經在某處定義,此處可以使用)。

函式外部的靜態變數是檔案可見的。其他檔案不可以通過名字使用該變數。

其他檔案裡同名的,本檔案不可見的變數不和該變數產生命名衝突。

其他檔案裡同名的靜態變數是另外乙個變數。

同一檔案內的同名的函式外部的靜態變數和外部變數(包括本檔案定義的和引用的外部變數)產生命名衝突。

函式內部的靜態變數具有函式作用域,會隱藏同名的外部和檔案靜態變數(和函式名)。

其中函式內部,語句組內定義的靜態變數,具有語句組作用域,會隱藏本語句組外面定義的所有同名識別符號。

函式內部的靜態變數,函式外部的靜態變數,外部變數,具有全域性的生存期。

靜態變數以外的區域性變數具有函式作用域會隱藏同名的外部和檔案靜態變數(和函式名)。

其中語句組內定義的區域性變數,具有語句組作用域,會隱藏本語句組外面定義的所有同名識別符號。

同一作用域的同名識別符號(主要是函式和變數)會產生命名衝突!!

c中一切不造成隱藏的,同名識別符號,會產生命名衝突,編譯不能通過!!

c++由於函式可以過載,有二義性的函式命名衝突,編譯不能通過!!

函式和變數的命名衝突,編譯不能通過!!

函式引數 具有函式作用域。

區域性變數,靜態全域性變數,靜態區域性變數的區別和聯絡

15樓:網友

區域性變數與其它兩個有本質區別。

區域性變數,定義在函式內,作用域為定義位置,到所在大括號。

結束。 每次執行到定義語句的時候,系統為該變數分配記憶體,當作用域結束後,記憶體被釋放。

而另外兩個,都是在系統執行時就分配記憶體,在執行過程中都不會釋放,直到程式結束。

也就是說,區域性變數和其它兩個,最明顯的區別:

1 生命週期不同。

2 分配時間不同。

3 分配位置不同。

而另外兩個,在這幾項上是相同的,之間的區別在於作用域。

靜態全域性變數,作用域為定義改變數的所在檔案。

而靜態區域性變數,作用域與普通區域性變數一樣,都是定義位置到所在大括號結束。

區域性變數,成員變數,靜態變數分別怎麼宣告

16樓:超級

迴圈或方法內部申明的變數叫區域性變數,方法之外類中的變數成為全域性變數,靜態變數加上static,int a=0在方法中這是區域性,在方法外全域性,static int a,靜態變數。

c中靜態變數和方法用什麼用處,C 中靜態變數和方法用什麼用處

1 靜態變數 在c 程式中,沒有全域性變數的概念,這意味著所有的成員變數只有該類的例項才能操作這些資料,這起到了 資訊隱藏 的作用。但有些時候,這樣做卻不是個明智的選擇。假設我們要定義一個圖書類,要求該類能儲存圖書的數量,即每增加一本圖書 定義一個例項 圖書的數量應該加1。如果沒有靜態變數,我們需要...

全域性變數靜態全域性變數靜態區域性變數和區域性變數的區別

c 變數根據定義位置的不同,具有不同的作用域,作用域可分為6種 全域性作用域,區域性作用域,語句作用域,類作用域,命名作用域和檔案作用域。從作用域看 全域性變數具有全域性作用域。全域性變數只需在一個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字...

C語言靜態變數問題?c語言中靜態變數是怎麼用的

static變數static宣告的變數為 靜態區域性變數 變數內容具有永續性。該區域性變數的值在函式呼叫結束之後不會消失,而仍然保留其原值。即它所佔用的儲存單元不釋放,在下一次呼叫該函式時,其區域性變數的值仍然存在,也就是上一次函式呼叫結束時的值。return m 前置 是用之前就加,用的人拿到的一定是新...