2.1 變量名
變量名由字母和數字組成,但第一個字符必須是字母。下劃線“_”被看作是字母,通常用於命名較長的變量名。由於例程的名字通常以下劃線開頭,因此變量名不要以下劃線開始。在傳統的C語言中,變量名使用小寫字母,符號常量全部使用大寫字母。
類似於if、else、int、float等關鍵字是保留給語言本身使用的,不能用作變量名,所有關鍵字中的字符都必須小寫。
2.2 數據類型及長度
C語言中只提供了這幾種基本數據類型:char,int,float,double。此外,還可以在這些基本數據類型的前面加一些限定符。short和long用於限定整型:
short int sh;
long int counter;
上述聲明中,關鍵字int可以省略,通常人們也習慣這樣做。
int通常代表特定機器中整數的自然長度。short類型通常爲16位,long類型通常爲32位,int類型可爲16位或32位。注意,無論什麼硬件條件,short與int類型至少爲16位,long至少32位,且short不得長於int型,int型不得長於long型。
類型限定符signed和unsigned可用於限定char類型或任何整型。unsigned類型的數總是正值或0,並遵守算術模2n定律,其中n是該類型佔用的位數。
long double類型表示高精度的浮點數。
有關這些類型長度定義的符號常量以及其他與機器和編譯器有關的屬性可以在標準頭文件<limits.h>和<float.h>中找到。
程序練習2-3知,二進制、八進制、十六進制轉換爲十進制的簡單方法,編程很方便。假設十六進制數(0f93)16=((f*16)+9)*16+3=(3987)10。
進行位運算時,要注意:第一位時指地位的第一位,二進制數的右邊的第一位。
2.3 常量
類似於1234的整數常量屬於int型,long類型的常量以字母l或L結尾,如果一個整數太大以至於無法用int類型表示時,也將被當做long類型處理。無符號常量以字母u或者U結尾。後綴ul或UL表明時unsigned long型。
浮點數常量中包含一個小數點(如123.4)或一個指數(如le-2),也可以兩者都有。沒有後綴的浮點數常量爲double型。後綴爲f或F表示float類型,而後綴l或L則表示long double型。
整型數除了用十進制表示外,還可以用八進制或十六進制表示。帶前綴0的整型常量表示它爲八進制;帶前綴0x或0X的整型常量表示它爲十六進制。
一個字符常量是一個整數,書寫時將一個字符括在單引號中,字符在機器字符集中的數值就是字符常量的值。如在ASCII字符集中,’0’的值爲48,它與數值0沒有關係。
ANSI C語言中全部轉義字符表
/a |
響鈴符 |
// |
反斜槓 |
/b |
回退符 |
/? |
問號 |
/f |
換頁符 |
/’ |
單引號 |
/n |
換行符 |
/” |
雙引號 |
/r |
回車符 |
/ooo |
八進制數 |
/t |
橫向製表符 |
/xhh |
十六進制數 |
/v |
縱向製表符 |
|
|
字符常量’/0’表示值爲0的字符,也就是空字符(null)。我們通常用’/0’的形式代替0,以強調某些表達式的字符屬性,但其數字值爲0。
字符串常量也叫字符串字面值,是用雙引號括起來的0個或多個字符組成的字符序列。從技術角度看,字符串常量就是字符數組,且使用空字符’/0’作爲串結尾,因此,存儲字符串的物理單元數比括在雙引號中的字符數多一個。標準庫函數strlen(s)可以返回s的長度,但長度不包括末尾的空字符。
字符和字符串之間的區別:’x’和”x”是不同的,前者是一個整數,後者是一個包含一個字符以及一個結束符’/0’的字符數組。
枚舉常量時另外一種類型的常量,枚舉是一個常量整型值的列表。在沒有顯示說明的情況下,enum類型中第一個枚舉名的值爲0,第二個爲1,依次類推。如果只指定了部分枚舉名的值,那麼未指定的枚舉名的值將依着最後一個指定值向後遞增。如:
enum escapes {BELL=’/a’,BACKSPACE=’/b’,TAB=’/t’};
enum months{JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
/*FEB=2,MAR=3,依次類推*/
不同枚舉中的名字必須互不相同,同一枚舉中不同的名字可以具有相同的值。
枚舉與#define語句相比,優勢在於常量值可以自動生成。
2.4 聲明
所有變量必須先聲明後使用。
任何變量的聲明都可以使用const限定符限定。該限定符指定變量的值不能被修改。對數組而言,const限定符指定數組所有元素的值都不能被修改。
const也可以配合數組參數使用,它表示函數不能修改數組元素的值:
int strlen(const char[]);
2.5 算術運算符
需要注意,一是取模運算符%不能應用於float或double型;二是運算符的優先級。
2.6 關係運算符與邏輯運算符
關係運算符:>,<,>=,<=。
需要注意,邏輯運算符&&和||有一些較爲特殊的屬性,由&&和||連接的表達式按從左到右的順序進行求值,且在知道結果值爲真或假後立即停止計算(&&優先級比||高)。
在關係表達式或邏輯表達式中,如果關係爲真則表達式結果值爲數值1;反之爲0。
2.7 類型轉換
當一個運算的幾個操作數類型不同時,就需要通過一些規則把它們轉換爲某種共同的類型。一般來說,自動轉換是指把“比較窄的”操作數轉換爲“比較寬的”操作數,並且不丟失信息的轉換。如:f+i時,將i自動轉換爲浮點型f型。
注意,表達式中float型不會自動轉換爲double型。
強制轉換: (類型)表達式;
2.8 自增運算符與自減運算符
++和--,既可以用作前綴運算符,也可以用作後綴運算符。在這兩種情況下,其效果都是將變量n的值加1,但是++n先將n的值遞增1,然後再使用n的值;而n++先使用n的值再將n的值遞增1。
2.9 按位運算符
6種:&,|,^,<<,>>,~
按位與運算符&經常用於屏蔽某些二進制位;按位或運算符|常用於將某些二進制位置爲1;按位與或運算符^當兩個操作數的對應位不同時該位置爲1,否則置爲0.
2.10 賦值運算符與表達式
無
2.11 條件表達式
expr1 ? expr2 : expr3
首先計算expr1,如果值不等於0(爲真),則計算expr2的值,並以該值作爲條件表達之的值,否則計算expr3的值,並以該值作爲條件表達之的值。
2.12 運算符優先級與求值次序
無