變量類型
C提供三種標準變量類型:
- 整數(shù)類型:int
- 浮點數(shù)類型:float
- 字符類型:char
int表示整數(shù),占4個字節(jié);float表示浮點數(shù),也占4個字節(jié);char表示單個字符(如“a”或“3”),占1個字節(jié);字符串被聲明為字符數(shù)組。
C還提供如下派生類型:
- double(8字節(jié)浮點數(shù)類型)
- short(2字節(jié)整數(shù)類型)
- unsigned short或unsigned int(非負整數(shù),沒有符號位)
運算符及其優(yōu)先級
C中的運算符和大多數(shù)語言類似:
+ 加 - 減 / 除 * 乘 % 取模
/ 運算符在操作數(shù)都是整數(shù)的情況下執(zhí)行整數(shù)除法運算,否則執(zhí)行浮點數(shù)除法運算。例如:
void main()
{float a;a=10/3;printf("%f\n",a);}
上面這段代碼將會打印出一個浮點數(shù),因為a被聲明為float。但由于執(zhí)行的是整數(shù)除法運算,所以a的值是3.0。
C的運算符優(yōu)先級和大多數(shù)語言的也很類似,即先乘除,后加減。5+3*4 的結(jié)果是17,不是32,因為*比+有更高的優(yōu)先級。使用括號可以改變正常的優(yōu)先級順序:(5+3)*4的結(jié)果是32。因為在括號中5+3優(yōu)先計算。我們后面還將遇到運算符優(yōu)先級——引入指針后C的運算符優(yōu)先級會變得復(fù)雜一些。
類型轉(zhuǎn)換
C可以自動類型轉(zhuǎn)換。特別是使用指針時需要經(jīng)常這樣做。某些類型間的賦值操作時也會發(fā)生類型轉(zhuǎn)換。例如,上面的程序中整型數(shù)值被自動轉(zhuǎn)換為浮點型。
顯式類型轉(zhuǎn)換時,將目的類型放在括號中,并放在要轉(zhuǎn)換的數(shù)據(jù)之前。例如,在上面的程序中,將a=10/3;替換為a=(float)10/3;后會得到結(jié)果3.33333,因為10在做除法之前已被轉(zhuǎn)換為浮點數(shù)了。
Typedef
使用C的typedef語句,用戶可以聲明自定義的類型。例如,下面代碼定義了一個C程序中經(jīng)常用到的類型:
#define TRUE 1
#define FALSE 0
typedef int boolean;
void main()
{boolean b;b=FALSE;……}
這段代碼在C程序中聲明布爾型的變量。
如果您不喜歡把實數(shù)的類型稱為“float”,您可以這樣寫:
typedef float real;
然后就可以使用實數(shù)類型了:
real r1,r2,r3;
只要在使用之前定義,typedef 語句可以出現(xiàn)在C程序的任何地方。
結(jié)構(gòu)體
在 C 語言中可以使用結(jié)構(gòu)體把變量組織到一起。例如:
struct rec
{int a,b,c;float d,e,f;};
struct rec r;
如上例所示,每當要聲明rec型的結(jié)構(gòu)體時,都要寫struct rec。這條規(guī)定很容易被忘記。一旦您由于疏忽忘了寫上struct,就會遇到很多編譯錯誤。上面的代碼可以縮減為下面的形式:
struct rec
{int a,b,c;float d,e,f;} r;
即用一個語句同時聲明了rec類型和一個rec類型的變量r。您也可以使用typedef 語句定義結(jié)構(gòu)體類型的名字。例如,如果您不喜歡每次聲明一個結(jié)構(gòu)體變量時都去寫struct rec r,則您可以用:
typedef struct rec rec_type;
定義一個新類型,然后就可以聲明rec_type類型的變量了:
rec_type r;
使用句點(.)訪問結(jié)構(gòu)體的成員。如r.a=5;。
數(shù)組
在一般變量聲明的變量名后加上數(shù)組的大小即可聲明一個數(shù)組,如下所示:
int a[10]; /* 整數(shù)數(shù)組 */
char s[100]; /* 字符數(shù)組(C 的字符串) */
float f[20]; /* 實數(shù)數(shù)組 */
struct rec r[50]; /* 結(jié)構(gòu)體數(shù)組 */
增量
長記法 短記法 i=i+1; i++; i=i-1; i--; i=i+3; i += 3; i=i*j; i *= j;
動手一試 試寫幾段代碼研究一下類型轉(zhuǎn)換和運算符優(yōu)先級。考查對象包括int、char、float等。 創(chuàng)建一個結(jié)構(gòu)體數(shù)組,然后編寫一段代碼,使其基于結(jié)構(gòu)體的一個整型成員對結(jié)構(gòu)體數(shù)組排序。 ?
C 常見錯誤 如前所述,當使用/運算符計算兩個整數(shù)時常常會得出意想不到的結(jié)果。用前請三思。
評論