1樓:
c語言中區域性變數存在棧裡,全域性變數存靜態儲存區。
區域性變數在棧空間上分配,這個區域性變數所在的函式被多次呼叫時,每次呼叫這個區域性變數在棧上的位置都不一定相同。區域性變數也可以在堆上動態分配,但是記得使用完這個堆空間後要釋放之。
全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。在程式執行過程中它們佔據固定的儲存單元,而不動態地進行分配和釋放;
擴充套件資料
c語言中區域性變數和全域性變數示例:
#include
#include
staticints1=0,s2=0,s3=0;//靜態變數放在靜態區
intg1=0,g2=0,g3=0;//全域性變數放在靜態區
voidmain()
staticints4=0,s5=0,s6=0;//靜態變數
inta1=0,a2=0,a3=0;//區域性變數放在棧區
charc1="aabb";//區域性變數放在棧區
char*c2="aabb";//字元常量放在靜態區
char*m1=(char*)malloc(1);//堆區
char*m2=(char*)malloc(1);//堆區
char*m3=(char*)malloc(1);//堆區
printf("動態資料區\n");
printf("c1\n",c1);
printf("靜態資料區\n");
printf("c2\n",c2);
2樓:匿名使用者
記憶體中供使用者使用的儲存空間分為三部分,
1、程式區
2、靜態儲存區
3、動態儲存區
全域性變數全部放在靜態儲存區中,而在動態儲存區中存放函式形式引數和自動變數(區域性變數)以及函式呼叫時的現場保護和返回地址,因為你知道的,函式呼叫是通過系統棧實現的。
3樓:匿名使用者
全域性變數和區域性靜態變數在記憶體靜態區;
區域性變數在棧區。
4樓:匿名使用者
全域性資料區:存放程式的全域性資料和靜態資料
堆區:存放程式的動態資料
區域性變數 全域性變數 動態變數分別儲存什麼位置
5樓:文修令恨真
以int
a為例如果int
a定義在函式外,(包括main函式)那麼它就是全域性變數,在函式內的就是區域性變數。
而定義的時候加了static修飾的就是靜態變數,沒加static的就是動態變數
6樓:匿名使用者
在c語言裡面,區域性變數,全域性變數都是存貯在棧(stack)裡面的,而所有用malloc和new這種操作符動態分配的空間則都是存貯在堆(dump)裡面的,
舉個簡單的例子:
int *ptr;
ptr =(int*)malloc(100*sizeof(int));
這兩句中,ptr這個指標變數是存貯在棧裡面,但是他所指向的內容則是在堆裡面。明白了嗎
7樓:c51新手
樓上回答的很好,我也學習了
c語言中 全域性變數與區域性變數在記憶體中的區別
8樓:
看了樓上的回答,雖然能完全解釋這個問題.
但是我不能完全同意其說法.
cpu 記憶體 等硬體高度發展的今天,這些已經不是我們所必需要考慮的因素.
註明: 如下內容,並非針對本題(記憶體區別),只是根據我的經驗說幾句.
其實,除了連線資料庫的相關配置等以外的東西的,我不太推薦使用全域性變數.因為,在一個大程式執行時,別說一個變數,就算是子程式與子程式不停地切換也是非常正確的事.如果使用太多的全域性變數,對安全非常不利.
所以應該儘可能使用區域性變數,不但要使用,還要細分成多個層次,比如,函式內部的,為最低層,那麼,函式外面的,為第二層,再往上走,....(略去一些),程式與程式之間的通訊,為處三層,...(略去一些),再往上走,出了整個程式的,為最高層,也就是全域性變數.
僅為個人看法和經驗之談,有興趣的朋友,可以跟我交流.
不感興趣的朋友請飄過,別罵我.因為罵我也沒用.呵呵....
9樓:衡嶽蒼蒼
全域性變數是使用相同的記憶體塊在整個類中儲存一個值.
全域性變數的存在主要有以下一些原因:
1,使用全域性變數會佔用更多的記憶體(因為其生命期長),不過在計算機配置很高的今天,這個不成為什麼問題,除非使用的是巨大物件的全域性變數,能避免就一定要避免。
2,使用全域性變數程式執行時速度更快一些(因為記憶體不需要再分配),同樣現在也快不了多少。
3,對於區域性變數的名字空間汙染,這個在不使用太多變數時是可以避免的。
總之,全域性變數可以使用,但是全域性變數使用時應注意的是儘可能使期名字易於理解,而且不能太短,避免名字空間的汙染;避免使用巨大物件的全域性變數。
區域性變數:在程式中,只在特定的過程或函式中可以訪問的變數,是相對與全域性變數而言的。
全域性變數也稱為外部變數,是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。
區域性變數可以和全域性變數重名,但是區域性變數會遮蔽全域性變數。在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。
c語言中全域性變數存放在記憶體空間中的哪個位置?
10樓:晨曦月殤
全域性變數是程式設計術語中的一種,源自於變數之分。
變數分為區域性與全域性,區域性變數又可稱之為內部變數。由某物件或某個函式所建立的變數通常都是區域性變數,只能被內部引用,而無法被其它物件或函式引用。
全域性變數既可以是某物件函式建立,也可以是在本程式任何地方建立。全域性變數是可以被本程式所有物件或函式引用。一個區域性變數在被其它物件引用時,會是一個空值。
但全域性變數卻不會出現這種情況。
全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。在程式執行過程中它們佔據固定的儲存單元,而不動態地進行分配和釋放;
c語言中重名的全域性變數和區域性變數是怎樣區分和儲存的
11樓:壬含雁
可以用引用標頭檔案的方式,也可以用extern關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中宣告的全域性變理,假定你將那個變寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連線期間報錯。 3、全域性變數可不可以定義在可被多個.c檔案包含的標頭檔案中?
為什麼? 答:可以,在不同的c檔案中以static形式來宣告同名全域性變數。
可以在不同的c檔案中宣告同名的全域性變數,前提是其中只能有一個c檔案中對此變數賦初值,此時連線不會出錯 4、語句for( ;1 ;)有什麼問題?它是什麼意思? 答:
和while(1)相同。
易語言中變數全域性變數區域性變數常量之間有什麼區別
全域性變數就是整個程式都可以用的,比如你在子程式.按鈕1 被單擊下 建了一個變數a,在按鈕1下可以呼叫 但是到了.子程式 編輯框1 內容被改變 這個子程式下如果輸入變數a也可以呼叫的 區域性變數就是隻有一個子程式下可以使用的變數 就比如說這個變數a在 子程式.按鈕1 被單擊下 建立了,在.子程式 編...
全域性變數靜態全域性變數靜態區域性變數和區域性變數的區別
c 變數根據定義位置的不同,具有不同的作用域,作用域可分為6種 全域性作用域,區域性作用域,語句作用域,類作用域,命名作用域和檔案作用域。從作用域看 全域性變數具有全域性作用域。全域性變數只需在一個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字...
全域性變數和區域性變數的區別,區域性變數和全域性變數的區別是什麼?
全域性變數與區域性變數的區別在於作用域的不同,且存在時間也可能不同。不管有不有外部的變數,main函式中的變數都不能稱為全域性變數。全域性變數是可以被本程式所有物件或函式引用。例如 圖中的 t1為全域性變數,可以在main函式中使用,也可以在a函式中使用。而t2 t3則為區域性變數,它們只能在花括號...