當前位置:才華齋>計算機>C語言>

C語言變數和資料型別

C語言 閱讀(1.61W)

計算機要處理的資料是以二進位制的形式存放在記憶體中的,那麼大家知道C語言變數和資料型別是怎樣的呢?下面一起來看看!

C語言變數和資料型別

 變數(Variable)

現實生活中我們會找一個小箱子來存放物品,一來顯得不那麼凌亂,二來方便以後找到。計算機也是這個道理,我們需要先在記憶體中找一塊區域,規定用它來存放整數,並起一個好記的名字,方便以後查詢。這塊區域就是“小箱子”,我們可以把整數放進去了。

C語言中這樣在記憶體中找一塊區域:

int a;

int又是一個新單詞,它是 Integer 的簡寫,意思是整數。a 是我們給這塊區域起的名字;當然也可以叫其他名字,例如 abc、mn123 等。

這個語句的意思是:在記憶體中找一塊區域,命名為 a,用它來存放整數。

注意 int 和 a 之間是有空格的,它們是兩個詞。也注意最後的分號,int a表達了完整的意思,是一個語句,要用分號來結束。

不過int a;僅僅是在記憶體中找了一塊可以儲存整數的區域,那麼如何將 123、100、999 這樣的數字放進去呢?

C語言中這樣向記憶體中放整數:

a=123;

=是一個新符號,它在數學中叫“等於號”,例如 1+2=3,但在C語言中,這個過程叫做賦值(Assign)。賦值是指把資料放到記憶體的過程。

把上面的兩個語句連起來:

int a;

a=123;

就把 123 放到了一塊叫做 a 的記憶體區域。你也可以寫成一個語句:

int a=123;

a 中的整數不是一成不變的,只要我們需要,隨時可以更改。更改的方式就是再次賦值,例如:

int a=123;

a=1000;

a=9999;

第二次賦值,會把第一次的資料覆蓋(擦除)掉,也就是說,a 中最後的值是9999,123、1000 已經不存在了,再也找不回來了。

因為 a 的值可以改變,所以我們給它起了一個形象的名字,叫做變數(Variable)。

int a;創造了一個變數 a,我們把這個過程叫做變數定義。a=123;把 123 交給了變數 a,我們把這個過程叫做給變數賦值;又因為是第一次賦值,也稱變數的初始化,或者賦初值。

你可以先定義變數,再初始化,例如:

int abc;

abc=999;

也可以在定義的同時進行初始化,例如:

int abc=999;

這兩種方式是等價的。

變數定義的位置

在VC或VS下,變數定義要放在函式的開頭;也就是說,在定義變數之前不能有其他程式碼。而在 GCC、Xcode 下,或者在使用了 GCC 編譯器的 C-Free、Dev C++、Code::Blocks 下,變數定義可以放在函式的.任意位置。

例如,下面的程式碼在 VC、VS、GCC、Xcode 下都是正確的:

#includeint main(){ int a = 10; int b = 1000; printf("BianChengBang"); return 0;}

對程式碼稍作修改,將 printf 語句放在變數 a、b 中間,如下所示:

#include

int main()

{

int a = 10;

printf("BianChengBang");

int b = 1000; //在定義b變數之前有 printf 語句

return 0;

}

修改後的程式碼在 GCC、Xcode 下是正確的,而在 VC、VS 下就是錯誤的。

為什麼不同的編譯器會有不同的差異呢,根本原因是什麼呢?我們將在《C語言變數的定義位置以及初始值》和《C語言的兩套標準》兩節詳細講解。

資料型別(Data Type)

資料是放在記憶體中的,變數是給這塊記憶體起的名字,有了變數就可以找到並使用這份資料。但問題是,該如何使用呢?

我們知道,諸如數字、文字、符號、圖形、音訊、視訊等資料都是以二進位制形式儲存在記憶體中的,它們並沒有本質上的區別,那麼,00010000 該理解為數字16呢,還是影象中某個畫素的顏色呢,還是要發出某個聲音呢?如果沒有特別指明,我們並不知道。

也就是說,記憶體中的資料有多種解釋方式,使用之前必須要確定;上面的int a;就表明,這份資料是整數,不能理解為畫素、聲音等。int 有一個專業的稱呼,叫做資料型別(Data Type)。

顧名思義,資料型別用來說明資料的型別,確定了資料的解釋方式,讓計算機和程式設計師不會產生歧義。在C語言中,有多種資料型別,例如:

說 明字元型短整型整型長整型單精度浮點型雙精度浮點型無型別
資料型別charshortintlongfloatdoublevoid

這些是最基本的資料型別,是C語言自帶的,如果我們需要,還可以通過它們組成更加複雜的資料型別,後面我們會一一講解。

連續定義多個變數

為了讓程式的書寫更加簡潔,C語言支援多個變數的連續定義,例如:

int a, b, c;float m = 10.9, n = 20.56;char p, q = '@';

連續定義的多個變數以逗號,分隔,並且要擁有相同的資料型別;變數可以初始化,也可以不初始化。

資料的長度(Length)

所謂資料長度(Length),是指資料佔用多少個位元組。佔用的位元組越多,能儲存的資料就越多,對於數字來說,值就會更大,反之能儲存的資料就有限。

多個數據在記憶體中是連續儲存的,彼此之間沒有明顯的界限,如果不明確指明資料的長度,計算機就不知道何時存取結束。例如我們儲存了一個整數 1000,它佔用4個位元組的記憶體,而讀取時卻認為它佔用3個位元組或5個位元組,這顯然是不正確的。

所以,在定義變數時還要指明資料的長度。而這恰恰是資料型別的另外一個作用。資料型別除了指明資料的解釋方式,還指明瞭資料的長度。因為在C語言中,每一種資料型別所佔用的位元組數都是固定的,知道了資料型別,也就知道了資料的長度。

在32位環境中,各種資料型別的長度一般如下:

說 明字元型短整型整型長整型單精度浮點型雙精度浮點型
資料型別charshortintlongfloatdouble
長 度124448

C語言有多少種資料型別,每種資料型別長度是多少、該如何使用,這是每一位C程式設計師都必須要掌握的,後續我們會一一講解。

最後的總結

資料是放在記憶體中的,在記憶體中存取資料要明確三件事情:資料儲存在哪裡、資料的長度以及資料的處理方式。

變數名不僅僅是為資料起了一個好記的名字,還告訴我們資料儲存在哪裡,使用資料時,只要提供變數名即可;而資料型別則指明瞭資料的長度和處理方式。所以諸如int n;、char c;、float money;這樣的形式就確定了資料在記憶體中的所有要素。

C語言提供的多種資料型別讓程式更加靈活和高效,同時也增加了學習成本。而有些程式語言,例如PHP、JavaScript等,在定義變數時不需要指明資料型別,編譯器會根據賦值情況自動推演出資料型別,更加智慧。

除了C語言,Java、C++、C#等在定義變數時也必須指明資料型別,這樣的程式語言稱為強型別語言。而PHP、JavaScript等在定義變數時不必指明資料型別,編譯系統會自動推演,這樣的程式語言稱為弱型別語言。

強型別語言一旦確定了資料型別,就不能再賦給其他型別的資料,除非對資料型別進行轉換。弱型別語言沒有這種限制,一個變數,可以先賦給一個整數,然後再賦給一個字串。

最後需要說明的是:資料型別只在定義變數時指明,而且必須指明;使用變數時無需再指明,因為此時的資料型別已經確定了。