C語言中文網 目錄
首頁 > 編程筆記 > C語言筆記 閱讀:19,923

C語言變量定義和賦值

定義變量的格式非常簡單,如下所示:

數據類型  變量名;

首先要強調的一點是:最后的分號千萬不要丟了。變量的定義是一個語句,我們說過,語句都是以分號結尾的。

“數據類型”表示想要存儲什么類型的數據就定義什么類型的變量。想要存儲整數就定義成 int 型;想要存儲小數就定義成 float 型或 double 型;想要存儲字符就定義成 char 型……

“變量名”就是你想給這個變量起個什么名字,通常都是用字母。比如:

int i;

就表示定義了一個整型變量 i。變量名的命名規則稍后會詳細地講。

那么變量定義好之后怎么將數放到這個變量里面呢?首先要理解的是,將一個數字放到一個變量中,這個動作叫“賦值”。“賦”即“給予”的意思,所以“給變量賦值”意思就是將一個值傳給一個變量。那怎么賦值呢?是通過賦值運算符=,賦值的格式是:

變量名 =  要賦的值;

它的意思是將=右邊的數字賦給左邊的變量。比如:
i = 3;
這就表示將 3 賦給了變量 i,此時 i 就等于 3 了。

這里需要注意的是,這里的=跟數學中的“等于號”是不一樣的。在剛開始學習C語言的時候,在這一點上大家很難從數學的思維中轉變過來。在C語言中=表示賦值,即將右邊的值賦給左邊的變量,而不是左邊的變量等于右邊的值。

那C語言中有沒有表示相等的運算符呢?這就是雙等號==。這個運算符就與數學中的“等于”是同一個意思了。

以上就是變量的定義和賦值,它們是分成兩步寫的。也可以將它們合成一步,而且事實上,在實際編程中用得最多的也是合二為一的寫法。那么怎么合在一起呢?很簡單,形式如下:

數據類型  變量名 = 要賦的值;

比如:

int i = 3;

就表示定義了一個變量 i,并把 3 賦給這個變量。它與

int i;
i =3;

是等價的。

在定義變量時也可以一次性定義多個變量,比如:

int i, j;

這就表示定義了變量 i 和 j。這里需要強調的是,當同時定義多個變量時,變量之間是用逗號隔開的,千萬別寫成分號。這是很多新手最容易犯的錯誤,即將逗號和分號記混了。

同樣也可以在定義多個變量的同時給它們賦值:

int i = 3, j = 4;

中間還是用逗號隔開,最后別忘記輸入分號。

最后需要注意的是,在較老的 C89/C90 標準(也稱 ANSI C 標準)中,變量只能在程序的開頭定義,或者說變量定義的前面不能有其他非聲明或非定義的語句。比如在C語言中像下面這種寫法就是錯誤的:
# include <stdio.h>
int main(void)
{
    int i;
    i = 3;
    int j = 4;  //這句是錯誤的,因為在它前面有一個給變量i賦值的非定義語句
    return 0;
}
在 VC++ 6.0 或者 VS2010 下編譯的時候會提示下面的錯誤:

error C2143: 語法錯誤 : 缺少“;”(在“類型”的前面)

但是這種寫法在.cpp文件(C++ 源文件)中是允許的,.cpp文件中可以在程序的任意位置定義變量。

其實這與語言本身并沒有什么關系,并不是說C語言中變量就不能定義在程序中間。這實際上是與標準有關系的,有些編譯器使用的是 C89 標準,C89 標準要求所有聲明(比如函數聲明、變量定義)必須要寫在程序、函數或復合語句的開頭,而 C99 的新特性允許語句和聲明按任意順序排列,只要遵循“先聲明后使用”的原則就行。

因為 VC++ 6.0 和 VS2010 遵循的是 C89 標準,或者說它不能完全支持 C99 標準,所以它不允許將變量定義在程序中間;而 LinuxGCC 編譯器遵循的是 C99 標準,所以同樣是.c文件,同樣是編寫C語言,它就可以將變量定義在程序的任意位置,只要是在使用位置之前即可。

其實 C99 標準是比較好的,變量需要的時候才定義,縮短了它的生命周期,節省了內存。因為只要定義變量,系統就會為它分配內存空間,所以如果在前面定義了但是到最后才使用它,那么在使用之前它一直占著內存不放,有點浪費。

但是盡管如此,大家在編程的時候還是盡量按照 C89 的標準編寫,即使在完美支持 C99 標準的編譯器中也最好不要將聲明寫在程序的中間。因為 C89 歷時較長,現在它仍然是主流,很多編譯器仍然只支持 C89 標準或不能很好地支持 C99 標準。所以按 C89 標準編寫可移植性更強。

上面提到“復合語句”,在復合語句中也可以定義變量。所謂語句就是以分號結尾的,而復合語句就是多個語句組合在一起的語句。在C語言中,用大括號{ }括起來的多個語句稱為復合語句。

復合語句在流程控制中用得特別多,比如后面將要學習的 if、for、while 一般都是跟復合語句的。此時在這些復合語句中也可以定義變量,但是也只能定義在它的開頭。主函數 main 下面也是用大括號括起來的,所以主函數 main 下的函數體本質上也是一個復合語句,是一個大的復合語句。

所以它們還是有共性的,也就是說,在C語言中,只要是用大括號{ }括起來的,那么在它的開頭都可以定義變量。而且這些在大括號中定義的變量都稱為局部變量。此外,在大括號外面也可以定義變量,叫全局變量。這個我們就先不講了,到后面再講。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo