本文是《三天學會C語言編程》的第二篇文章,承接上一篇《三天學會C語言編程 | 上篇》。本文重點介紹C語言的數據類型、表達式、變量和函數等內容。
數據類型
C語言中有多種數據類型,這些數據的類型與我們日常生活中的數據的類型有些類似。比如整型數和浮點型數(小數),還有一些我們平時接觸不到的數據類型,如字符串類型(上文中的hello world!就是一個字符串類型的數據)。如下表是C語言支持的數據類型(部分),這裡先不用過多理解,只需要知道有這些類型就行,後面會詳細介紹。通過這個表可以看出不同類型的數據佔用的內存空間大小是不同的。
變量
變量其實是內存的一個區域,用於存儲具體的數據,需要說明的是變量是有名稱的。變量的名稱就好像郵箱的編號一樣,這樣我們在編程的時候就可以通過這個名字方便的訪問(讀或者寫)變量。
在C語言中變量的名稱可以是英文字符、下劃線和數字,但只能以英文字符和下劃線開頭,不能以數字開頭。另外,C語言中變量名稱是區分大小寫的,也就是var_name和var_Name是兩個不同的變量。
我們知道在C語言中數據是有不同的類型的,同樣變量也有不同的類型。不同類型的變量用於存儲不同類型的數據,而且不同類型變量佔用的空間大小是不同的。那麼如何定義一個變量呢?很簡單,其基本格式就是類型+變量名稱,如下定義了一個整形的變量:
int var_name;
其它類型的變量與此類似,只是變量的類型不同。至於名稱則遵循上文所描述的規範。
表達式
我們知道程序最主要的功能就是進行計算的,因此在程序中會有一些表達式進行計算。表達的形式與日常數學中的表達式基本一致,運算的優先級也類似。如下是一個簡單的表達式:
3 + 5 * 6
這個表達式進行簡單的數據計算,但該表達式在實際編程時並不沒有太大意義,因為計算出的值將被直接丟棄。通常我們需要將表達式計算的值放到一個變量這,這樣我們後面才能使用該表達式計算的結果。下面是一個具體的示例:
#include <stdio.h>int main(void){int a; //聲明整型變量 long b; // 聲明長整型變量 short c; // 聲明短整型變量 char d; // 聲明字符類型的變量 float e = 1.2; //聲明浮點型(小數)變量,在聲明的時候可以直接初始化 int f = 0; unsigined int = 3; // 聲明無符號整型變量,無符號整形只能是非負整數 b = 10; //給變量賦值,賦值就是改變變量的內容,讓其等於某個值 c = 11; // 注意賦值的方向,變量在等號左邊(又稱「左值」),數據在等號右面 a = a + 10; // 進行基本的加法運算 c = a + b; /* 可以進行不同類型的變量之間的運算,但可能會丟失數據。因為每種類型變量存儲的數值大小是有限的,超過就會溢出。本例中變量c是短整型,範圍是-32,768 到 32,767。而變量b是長整形,範圍是從-2,147,483,648 到 2,147,483,647。因此,如果計算結果超過了c的範圍,將會出現溢出,因此在計算是需要注意。*/ e = a + b * c; // 這裡的*是星號,也就是鍵盤8上面的字符,代表乘法 a = (a + e) * c; //可以使用括弧提升運算的優先級,本例中 a = a /c ; //除法運算 a = a % c; //取模運算 a --; //自減運算,也就是自己減1 a ++; //自加運算 /*除了進行基本的算術運算外,還可以進行位運算。所謂位運算就是逐位運算。*/ a = a & b; //按位「與」運算 a = a | b; //或 a = a ^ b; //異或 a = ~a; //非 /*關係運算,也就是判斷兩個或者多個變量的關係。*/ a == b; //判斷兩者是否相等,相等返回真,否則返回假 a >= b; a > b; a <=b; a != b; //判斷兩者是否相等,相等返回假,否則返回真 a && b; //注意是2個&,兩者都為真是結果為真。可以多餘2個進行運算 a || b; }
函數
我們在最一開始的時候已經使用了函數,但還沒有對函數進行任何介紹。下面本文將介紹一下什麼是函數,為什麼要有函數以及函數怎麼使用。
函數是對實現某個功能的代碼的封裝。有了函數之後,具體的功能我們調用該函數就可以完成,而不同將代碼黏貼過來,增加了便利性。
#include <stdio.h>/*下面是函數的定義*/int add(int a, int b) /*這一行成為函數頭,其中int是函數的返回值類型,add是函數名稱,int a和int b是函數的參數(形參)。這裡返回值和參數可以是任何類型。*/{ /*函數頭後面要緊跟著{,可以與函數頭在同一行,或者另起一行,這個代表函數體的開始*/int c = 0; c = a + b; //這裡是函數的具體實現,根其它地方沒有任何差異 return c; //函數的返回值,類型要與在函數頭中定義的一直,否則有截斷的風險 }/*函數體的結束*/ int main(void) { int a = 0; a = add(1, 2); /*函數的調用,這裡相當於使用add函數的功能,進行加法運算。*/ printf("result: %d\n", a);}
函數可以與入口函數在相同的文件中,也可以在一個單獨的文件中。函數的定義通常在.c文件中,而在頭文件(.h文件)中添加聲明。這樣我們只需要包含頭文件就可以使用該函數了。
好了今天先到這,到這裡基本上可以寫簡單的C語言程序了,並封裝成功能函數。明天寫最後一篇主要介紹流程控制、複雜的數據類型和系統庫等內容。