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