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