C語言 變數 手札

2021-06-25 21:11:49 字數 2526 閱讀 7843

函式中的區域性變數,如不專門宣告為static儲存類別,都是動態地分配儲存空間的,資料儲存在動態儲存區中。函式中的形參和在函式中定義的變數(包括在復合語句中定義的變數),都屬此類,在呼叫該函式時系統會給它們分配儲存空間,在函式呼叫結束時就自動釋放這些儲存空間。這類區域性變數稱為自動變數。自動變數用關鍵字auto作儲存類別的宣告。

例如:int f(int a) /*定義f函式,a為引數

a是形參,b,c是自動變數,對c賦初值3。執行完f函式後,自動釋放a,b,c所佔的儲存單元。

關鍵字auto可以省略,auto不寫則隱含定為「自動儲存類別」,屬於動態儲存方式。

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。

(1)第乙個作用:隱藏。

當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。

下面是a.c的內容

#include增加這條語句

char a = 『a『; // global variable

void msg()

你可能會問:為什麼在a.c中定義的全域性變數a和函式msg能在main.c中使用?前面說過,所有未加static字首的全域性變數和函式都具有全域性可見性,其它的原始檔也能訪問。此例中,a是全域性變數,msg是函式,並且都沒有加static字首,因此對於另外的原始檔main.c是可見的。

如果加了static,就會對其它原始檔隱藏。例如在a和msg的定義前加上static,main.c就看不到它們了。利用這一特性可以在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。static可以用作函式和變數的字首,對於函式來講,static的作用僅限於隱藏,而對於變數,static還有下面兩個作用。

(2)static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化。共有兩種變數儲存在靜態儲存區:全域性變數和static變數,只不過和全域性變數比起來,static可以控制變數的可見範圍,說到底static還是用來隱藏的。

(3)static的第三個作用是預設初始化為0。其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00,某些時候這一特點可以減少程式設計師的工作量。

最後對static的三條作用做一句話總結。首先static的最主要功能是隱藏,其次因為static變數存放在靜態儲存區,所以它具備永續性和預設值0。

下面是main.c的內容

除了標頭檔案,需要宣告函式:void msg();

int main(void)

有時希望函式中的區域性變數的值在函式呼叫結束後不消失而保留原值,這時就應該指定區域性變數為「靜態區域性變數」,用關鍵字static進行宣告。

【例】考察靜態區域性變數的值。

f(int a)

main()

對靜態區域性變數的說明:

1) 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元。在程式整個執行期間都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,佔動態儲存空間,函式呼叫結束後即釋放。

2) 靜態區域性變數在編譯時賦初值,即只賦初值一次;而對自動變數賦初值是在函式呼叫時進行,每呼叫一次函式重新給一次初值,相當於執行一次賦值語句。

3)如果在定義區域性變數時不賦初值的話,則對靜態區域性變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)。而對自動變數來說,如果不賦初值則它的值是乙個不確定的值。

【例】列印1到5的階乘值。

int fac(int n)

main()

為了提高效率,c語言允許將區域性變數得值放在cpu中的暫存器中,這種變數叫「暫存器變數」,用關鍵字register作宣告。

【例】使用暫存器變數。

int fac(int n)

main()

說明:1) 只有區域性自動變數和形式引數可以作為暫存器變數;

2) 乙個計算機系統中的暫存器數目有限,不能定義任意多個暫存器變數;

3) 區域性靜態變數不能定義為暫存器變數。

外部變數(即全域性變數)是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。如果外部變數不在檔案的開頭定義,其有效的作用範圍只限於定義處到檔案終了。如果在定義點之前的函式想引用該外部變數,則應該在引用之前用關鍵字extern對該變數作「外部變數宣告」。表示該變數是乙個已經定義的外部變數。有了此宣告,就可以從「宣告」處起,合法地使用該外部變數。

【例】用extern宣告外部變數,擴充套件程式檔案中的作用域。

int max(int x,int y)

main()

int a=13,b=-8;

說明:在本程式檔案的最後1行定義了外部變數a,b,但由於外部變數定義的位置在函式main之後,因此本來在main函式中不能引用外部變數a,b。現在我們在main函式中用extern對a和b進行「外部變數宣告」,就可以從「宣告」處起,合法地使用該外部變數a和b。

C語言 變數

整形變數的定義 有符號 int a int a 有符號整形 範圍 0 2 32 long int a long a 有符號長整形 範圍 0 2 32 short ing a short a 有符號短整型 範圍 0 2 16 無符號unsigned int a unsigned a 無符號整形 範圍 ...

《C語言變數》

我先舉乙個例子,如果我有乙個倉庫,我想把一些東西放進去,比如蘋果 西瓜等等。1 首先,我是不是應該要知道我要放的東西體積多大,還有就是 需要找多大的空間能放得下它。計算機的儲存空間就相當於這裡的倉庫。2 對倉庫來說它並不知道是蘋果還是西瓜,它只知道存放的是體積不一樣大的物體,因為名字是我們人類命名的...

c語言變數

第四次課 變數 一 變數的定義 變數的概念 值可以發生改變的量 語法 型別名 變數名,變數名,變數名 型別名 變數名 初值,變數名 初值 char a,b,c int e char a 0,b 0,c 0 char a 0 unsigned char e 0 int height 170 int w...