1樓:匿名使用者
a.auto b.static c.register d.extern
a 的變數在堆疊裡,自然是執行時
b 是靜態變數
c 是暫存器變數,使用的是cpu的暫存器
d 是全域性變數
bd都是放在資料段中的,編譯的時候就已經確定了位置(有的編譯器對b和d的處理不一樣)
2樓:
c語言:
a,函式內部或語句組內部的區域性變數預設是自動變數,即auto!函式外部定義的變數預設是外部變數,只有static,register才是必須在定義時宣告。
a.auto 自動變數;函式引數,和區域性變數的預設型別
一般省略,這個關鍵字的作用,只是告訴我們,有這樣乙個型別。
如果不定義這樣乙個關鍵字,就會出現,最經常使用的變數,
其儲存型別是個沒有命名的型別,的尷尬局面。
b.static 靜態變數;有3個層次;
1 )定義在函式外部,檔案層次區域性變數,佔據全域性記憶體的變數。是一種全域性變數
名字是檔案層次可見的。
2)定義在函式內部第1層大括號內部。
函式層次區域性可見,佔據全域性記憶體的變數。
名字是函式內部可見的。
3)定義在 函式內部第n層大括號內部。
第n層語句組或(者叫分程式)層次區域性可見,佔據全域性記憶體的變數。
名字是第n層語句組內部可見的。
c.register 只能是區域性變數;
d.extern 外部變數;全域性變數,函式外部定義的變數,佔據全域性記憶體的變數。
擁有引用可見性,全部可見性,和檔案可見性三種可見性。
檔案內部,自定義處起,具有全部可見性,可以看到變數的一切;
檔案內部,引用宣告處起具有引用可見性,只能看到型別(看不到陣列的大小),
非本檔案定義的變數也是可見的!
檔案可見性,沒有引用宣告的檔案,不可見本檔案定義的外部變數。
這種從沒有引用宣告的外部變數只有本檔案可見!
另外 static,extern 還可以定義函式;
extern 函式的定義和宣告都可以省略extern,也就是extern 是函式的預設儲存型別
static 是不可以省略的!
7、c語言中,形參的預設儲存類別為。 (a)auto (b) static (c)register (d)extern
3樓:匿名使用者
c。在函式內部或復合語句內定義變數時,如果沒有指定的儲存型別或使用了auto說明符,系統就認為所定義的變數具有自動類別。
形參即函式的自變數,其初值**於函式的呼叫。只有在程式執行過程中呼叫了函式,形參才有可能得到具體的值,並參與運算求得函式值。形參表相當於變數說明,但應特別注意:
此處只能使用型別識別符號,而不能直接使用型別。
用auto(或省略)來區分說明的區域性變數。當執行進入區域性變數所在的塊時,在棧上為變數分配儲存,退出塊時,儲存單元被**。具有自動儲存期的變數在進入宣告該變數的程式塊時被建立,它在該程式塊活動時存在,退出該程式塊時撤銷。
在函式內部定義的變數成為區域性變數。
擴充套件資料:
1、register關鍵字提示編譯器把區域性變數或函式的形參盡可能放入cpu的暫存器中,以便快速訪問。因此變數的位元組長度不應該超過暫存器的長度。不要用取位址符(&)去獲得此變數的記憶體位址。
例如:register int miles;
2、static是全域性變數的預設儲存類。例如:
static int count;
int road;
main()
printf("%d\n", count);
printf("%d\n", road);
count與road兩個變數都是預設的static儲存類。
3、extern儲存類是指全域性變數可以被各個物件模組訪問。使用extern關鍵字時,表示變數已經在別處定義,所以不能在此處初始化。
4樓:
形參是放在堆疊中的除非特殊宣告的函式如cxxbuilder fastcall!所以選a;
引數一般不會宣告為暫存器變數的!這樣的函式沒有辦法呼叫!
因為形參放在何處由函式的呼叫約定來確定,而不是由引數的儲存型別決定!
同樣外部變數或靜態變數也不會,不能定義成暫存器變數。
暫存器變數只適合函式內部定義的,用完不管的,通常是迴圈的計數變數!
靜態和外部是常用的兩個儲存型別。
外部變數一定在函式外部定義,這就是c,c++,外部變數中的「外部」的真實含義。
靜態變數,可以定義在
1)函式外部,屬於檔案模組的,表示檔案內部的具有全域性性質的區域性變數(儲存在全域性資料區。
2)函式內部,第一層大括號內,屬整個函式全域性性質的區域性變數。 儲存在全域性資料區。
3)函式內部的任何非資料定義的兩個大括號內部;
分程式(c一般叫語句組)屬整個分程式全域性性質的區域性變數。儲存在全域性資料區。
而函式內的非靜態資料預設為自動變數,所auto一般會省略不寫。
外部變數,一般定義時也省略掉extern,
只有在標頭檔案裡,和使用非本檔案定義的外部變數時,以及函式內部引用外部變數時,
才寫上extern 表示這是引用說明,不是定義,要看定義別處找找。
如果本檔案沒定義,就是引用別的檔案的同名變數!
所以除了函式引數(形參)和函式內部非靜態變數,再沒有自動變數了。
函式內部可以定義三種變數,區域性靜態變數,自動變數,暫存器變數;外部變數在函式內部只能有引用說明!不能在函式內部定義!
extern外部,靜態static兩個儲存型別是相對的。
外部變數,全部在函式外部定義。外部變數,分配在全域性資料區,是全域性變數。
外部是相對函式的。
靜態有定義在函式內部,和函式外部的區分,還有函式內部全域性,和函式內部某一語句組內部的區分,實際上,無論哪種靜態變數,都屬於全域性變數,分配在全域性資料區。
ps:除了變數外,函式也有 extern外部,靜態static 兩種儲存型別。
由於c語言不允許函式內部定義函式。
所以函式只有這兩種儲存型別。
函式的預設儲存型別是extern, 所以無論定義,還是引用說明,通常都會省略extern;
c語言中,只有寫了static的函式,才是靜態函式。
c語言中,函式可以在函式內部,有引用說明,不會在函式定義在函式內部。
c++中 類也有靜態變數和靜態函式;
由於類的靜態函式和靜態變數的外部定義會有類名和作用域限定符(也叫作用域運算子)::作為字首,所以類外定義不寫static;
類也有靜態變數和靜態函式的含義是這個變數和函式屬於整個類的(實際也是全域性變數,分配在全域性資料區),除了類和他的成員,外不能使用它了。
類通過類名,成員通過它本身(obj. ;pobj->; (*pobj). refobj. 類名::)使用;
只要類本身定義了。
不通過類的物件,就可以使用類的靜態變數和靜態函式。
其他成員,除了建構函式外都必須通過通過類的物件,才能使用。
5樓:匿名使用者
a.auto b.static c.register d.extern
a 的變數在堆疊裡,自然是執行時
b 是靜態變數
c 是暫存器變數,使用的是cpu的暫存器
d 是全域性變數
bd都是放在資料段中的,編譯的時候就已經確定了位置(有的編譯器對b和d的處理不一樣)
c語言中,函式的隱含儲存型別是:a. auto b.static c.extern d.register
6樓:匿名使用者
c。c語言規定,只要在定義函式時不進行儲存型別的顯式說明,函式的儲存型別就隱含為外部型別,即extern型,外部型別允許其他檔案中的函式呼叫。
實際上函式的宣告和定義都不需要新增extern關鍵字,在實際使用的時候也最好不要新增關鍵字。
如果乙個函式是不會被其它檔案呼叫的,那麼這個函式應該被宣告成static的。
如:extern int func(void){return 0;
跟int func(void){
return 0;
是等價的,另外
extern int func(void);
跟int func(void);是等價的。
7樓:匿名使用者
選a.c語言中,宣告變數的時候,如果型別前面不特別指明某些關鍵字(如static, extern, register)時,預設是auto,也稱自動變數。這種變數一般是臨時的,程式執行結束後,就由系統**了。
舉個簡單的例子:int a; 我們一般是這樣定義變數的。其實系統自動會在int前面自動加上atuo,變成auto int a;所以函式的隱含儲存型別是auto.
其它的幾個關鍵字各自都有其特殊的用途。
8樓:等等等我吃飯
a 不定義的型別都是auto
JSP中區域性變數和全域性變數的作用範圍
育知同創教育 jsp中的區域性和全域性變數定義方法 全域性變數的定義方法 變數型別 變數名 如,定義一個int型的全域性變數a寫法如下 int a 區域性變數定義方法 變數型別 變數名 如,定義一個string型的區域性變數b寫法如下 string sign 1 其實你換種方式看,jsp最終會轉譯成...
C語言外部變數與區域性變數同名問題
莫霞板申 inta 3,b 5 定義全域性變數,整個檔案作用域有效 max int a,int b 入參總是a 8,b 5 void main 麼秀英天香 a 3,b 5 是全域性變數整個程式中可見,a 8為區域性變數 區域性變數會在其作用域內遮蔽全域性變數,所以在main函式中a的值是8,b依然取...
C語言中有哪些儲存型別,C語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍
千鋒教育 c語言中的儲存型別有auto,extern,register,static 這四種,儲存型別說明了該變數要在程序的哪一個段中分配記憶體空間,可以為變數分配記憶體儲存空間的有資料區 bbs區 棧區 堆區。1.auto儲存型別 auto只能用來標識區域性變數的儲存型別,對於區域性變數,auto...