C語言類型轉換:
1. example:
int a;
a = 3.2 + 3 / 4.0; //先轉換成double,得0.75
//3.2 + 0.75 = 3.95
//因為a是整數,最後的結果決定於a的類型(即等號左邊的類型),結果為3。
2.隱式轉換:
a.運算轉換——不同類型數據混合運算時;
b.賦值轉換——把一個值賦予類型不同的變量時;
c.輸出轉換——輸出時轉換成指定的輸出格式;
d.函數調用——實參與形參類型不一致時轉換。
運算轉換:
(a)char, short 自動轉換>int,
(b)float 自動轉換>double
在參與數學運算時只有int和double兩種類型。所有的數學函數名的返回值都是double類型。
3.
example:
double x = 3.4;
(int)x;
首先在內存棧中分配八個字節作為x的空間;在常量區中也有八個字節存儲3.4;再在臨時空間中分配四個字節,將"3"存入這四個字節中。強制類型轉換得到所需類型的中間變量,原變量值不變。
4. ++,--(後置):先使用後執行
int a[10];
int *p = a;
m = *p++; //==>m = *(p++);
相當於m = *p; p++;
++(後置)和*都處於同一個優先級,結合順序是自右向左。
5.在C語言中"="賦值是一個運算符,也是有運算結果的,其運算結果與其左值是一樣的。
example:
b = a = 2; 先計算a = 2,再將a = 2的運算符結果賦給b。
example:
int a;
a = 10;
這裡存在運算轉換,因為10是一個short類型的常量,而賦給a後轉換成int類型。
6.",": 逗號運算符,它的值是最後一個表達式的值。
7. int main(): 正常返回是"0",出錯返回非零值
8. I/O緩沖
a.緩沖被寫滿
b.文件被關閉時,緩沖——>磁盤
c.flush()強制刷緩沖
d.程序崩潰的時候,不會寫到磁盤中去。
9.用最少的空間交換兩個數據
int a,b; int a,b,temp;
a = a + b; temp = a;
b = a - b; <== a = b;
a = a - b; b = temp;
用最少的空間,最快的方式交換兩個數
int a,b;
a = a ^ b;
b = a ^ b;
a = a ^ b;
因為兩個相同的數'^'為零,如 a^a^b = b; ==> 0^b = b;
10.
int main()
{
int *p; //這是不對的,p此時是一個空指針
scanf("%d", p);
}