C語言中,區域性變數的預設儲存類別為A auto B static C register D extern

時間 2021-08-16 09:00:06

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...