1樓:匿名使用者
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關鍵字時,表示變數已經在別處定義,所以不能在此處初始化。
2樓:
形參是放在堆疊中的除非特殊宣告的函式如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. 類名::)使用;
只要類本身定義了。
不通過類的物件,就可以使用類的靜態變數和靜態函式。
其他成員,除了建構函式外都必須通過通過類的物件,才能使用。
3樓:匿名使用者
a.auto b.static c.register d.extern
a 的變數在堆疊裡,自然是執行時
b 是靜態變數
c 是暫存器變數,使用的是cpu的暫存器
d 是全域性變數
bd都是放在資料段中的,編譯的時候就已經確定了位置(有的編譯器對b和d的處理不一樣)
1.在c語言中,形式引數的預設儲存類別是( )。 選項: a、auto b、register c、static d、extern
4樓:匿名使用者
1、c2、b
3、沒有i的初值,所以d
4、b5、d
6、g7、a
8、a9、1
10、2
11、2
12、2
13、2
14、1為8
c語言中,形參可以是常量,變數或表示式,這句話為什麼是錯的
說好的是形參。不是實參。實參就是對的。我覺得樓主可能沒有了解什麼是形參。當然。這個可以不用去理解也不影響 質量的。但是。理論就是這麼說的。最好看懂。形參只能是變數,在被定義的函式中,必須指定形參的型別。沒有確定的值 形參變數在未出現函式呼叫時,並不佔用記憶體,只在呼叫時才佔用。呼叫結束後,將釋放記憶...
c語言關於實參形參表示的方式的問題
1,形參前面加了void是空函式 意思是不要求返回值麼?那這題不是把宣告部分全部返還了麼?增加void表示不用返回值,即在函式中要使用return時,不用帶值。比如返回值為int型,那麼要用類似return 0 而本例直接return 即可。void inv int x int n 中x,n都是傳入...
C語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍
在c語言中,對變數的儲存型別說明有以下四種 1 auto 自動變數 2 register 暫存器變數 3 extern 外部變數 4 static 靜態變數 所謂儲存型別是指變數佔用記憶體空間的方式,也稱為儲存方式。變數的儲存方式可分為 靜態儲存 和 動態儲存 兩種。1 靜態儲存變數通常是在變數定義...