1樓:匿名使用者
1. (1)某個檔案中的全域性變數是任何其他檔案都可見的,只要extern宣告一下,任何檔案均可使用
(2)若在定義變數前加static,說明該變數只有該檔案內部可以使用,其他檔案無法使用。(即static限定了變數的可見性,但生命週期仍是全域性的)
2. static char a;
static const char a;
static const char* const a;
給lz推薦本書:《c++ primer》第四版,這樣的問題可以在這本書上找到很詳細的答案
lz不懂可繼續追問。
2樓:匿名使用者
全域性變數是其他檔案都能用的
靜態變數不可以
const static int cs = 100;
3樓:
全域性變數是其他檔案都能用的
靜態變數不可以,具有記憶性,記憶性!
const static int cs = 100;
4樓:0半人半神
1,全域性變數定義於所有函式之外,可以用在程式內的任何地方。
而靜態變數相當於將其固定在變數定義的地方,使其無法在其他地方被使用。還有貌似靜態變數存放資料的地點也和別的不太一樣。
2 static int k=0;static const(這裡const將後面的k轉換成常量) int k=0;
新手求教,c語言中 靜態區域性變數與靜態全域性變數的區別。
5樓:天雲一號
#include
static int a = 5; // 靜態全域性變數(函式外面)
void main()
c語言靜態區域性變數和全域性變數有什麼區別,不都是在整個程式中都有效嗎。希望能舉個簡單的例子,謝謝啦
6樓:
(1)靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。
(2)靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。
(3)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。
根據靜態區域性變數的特點, 可以看出它是一種生存期為整個原始檔的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值。 因此,當多次呼叫一個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。
雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成意外的***(尤其是短名全域性變數的變數名汙染很嚴重),因此仍以採用區域性靜態變數為宜。
簡單的說靜態區域性變數與全域性變數最明顯的區別就在於:全域性變數在其定義後所有函式都能用,但是靜態區域性變數只能在一個函式裡面用。
7樓:醉棋
靜態區域性變數只能在定義該變數的函式內使用,全域性變數可以在任意函式內使用。
8樓:陸美富
首先要清楚「整個程式」這個概念。
一個程式由多個編譯單位組成。每個可進行單獨編譯的原始檔稱為「編譯單位」。
在同一編譯單位內用extern說明符來擴充套件全域性變數的作用域。
當用static說明符說明全域性變數時,此變數可稱作「靜態」全域性變數。靜態全域性變數只限於本編譯單位使用,不能被其它編譯單位所引用。
9樓:
按儲存區域分:全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區
按作用域分:全域性變數在整個工程檔案內都有效;靜態全域性變數只在定義它的檔案內有效;靜態區域性變數只在定義它的函式內有效,只是程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。
全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為0。區域性變數的值不可知。
**如下:
//test.cpp
#include
extern int a;//變數宣告,不是定義static int b=5;
void func1()
//main.cpp
int a;
int b=10;
void func2()
void func1();
void main()
輸出結果為52012
10樓:幽靈詛咒師
單就你這個問題,回答就一句話,作用域不一樣。
簡單例子:
靜態區域性變數:只有定義這個變數的當前cpp能找到他的定義,其他cpp哪怕extern這個變數,包含對標頭檔案,要用,編譯都會報錯找不到。(至於生命週期,好比a.
cpp裡main函式,b.cpp裡定義一個b類,類裡面一個函式裡static int i(預設為0),並列印,賦另外一個值2,再列印,a.cpp裡呼叫b類裡這個函式兩次,第一次列印0,2;第二次列印2,2,就是說明這個變數在程式沒關的時候,哪怕出了b.
cpp,static int i的靜態區域性變數的值還在(但是你就是沒法直接在a.cpp裡extern來用這個i,要想這麼幹,請用全域性變數))
ps:靜態區域性變數和靜態全域性變數也差不多這意思,作用域,前者定義他的大括號裡可用,後者定義它的cpp檔案裡隨便用。靜態就是指作用域只在定義它的範圍(區域性or全域性)
全域性變數:同一個程式,其他cpp裡面只要extern這個變數,就能找到這個變數,且只要加好鎖,這個程式沒關掉,這個變數的數值就有確實含義(沒被delete)
11樓:小飛花兒的憂傷
作用域不同;編譯時期不同
什麼是靜態變數靜態變數全域性變數動態變數局
中目黒雨椋 非也。動態區域性變數 靜態區域性變數在靜態儲存區內分配儲存單元。在程式整個執行期間都不釋放。而自動變數 即動態區域性變數 屬於動態儲存類別,儲存在動態儲存區空間 而不是靜態儲存區空間 函式呼叫結束後即釋放。靜態區域性變數 靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退...
全域性變數和區域性變數的區別,全域性變數 靜態全域性變數 靜態區域性變數和區域性變數的區別
墨汁諾 一 用途不同 全域性變數 描述物件有什麼 在類中定義 類中所有方法都可以使用。區域性變數 臨時儲存資料 在類的方法中定義 只能在當前方法中使用。二 使用不同 全域性變數 整個類中可用 區域性變數 該方法內可用 三 初始值不同 全域性變數 有初始值 區域性變數 無初始值 擴充套件資料 使用全域...
C語言中,全域性變數與區域性變數同名時,以哪個為準
秋涵佴煊 在區域性變數的作用域內時,當做區域性變數,否則當作全域性變數 在定義區域性變數所在的範圍內,以區域性變數為準,否則就是全域性變數了 亓官學岺闢子 全域性變數是使用相同的記憶體塊在整個類中儲存一個值.全域性變數的存在主要有以下一些原因 1,使用全域性變數會佔用更多的記憶體 因為其生命期長 不...