一、基本語句
C語言的基本語句跟Java中的差不多,是以,這裡隻是簡單地提一下
- 循環語句(do while、while、for)
- 條件語句(if 、if-else、switch)
- goto語句
回到頂部
二、基本運算
計算機的基本能力就是計算,是以一門語言的計算能力十分重要。C語言之是以無所不能,很大原因在于它有強大的計算能力。C語言一共有34種運算符,其中的大多數運算符跟在Java中的用法是一樣的。下面做一個簡單介紹。
1.算術運算符
- + 加法運算符
- - 減法運算符,或負值運算符
- * 乘法運算符
- / 除法運算符
- % 模運算符,或稱取餘運算符,要求%兩側均為整型
2.關系運算符
- < 小于運算符
- <= 小于等于運算符
- > 大于運算符
- >= 大于等于運算符
- == 等于運算符
- != 不等于運算符
* 關系運算的結果成立就為"真"(比如5>=4),不成立則為"假"(比如5<4)
* 在Java中,關系運算的結果為"真"就傳回true,"假"則傳回false,用boolean類型的變量來接收
boolean b1 = 5 > 4; // trueboolean b2 = 5 < 4; // false
C語言中沒有boolean類型
* 在C語言中,關系運算的結果為"真"就傳回1,"假"就傳回0
int a1 = 5 > 4; // 1int a2 = 5 < 4; // 0
* 還需注意的是,在C語言中,任何非0值都為"真",隻有0值才為"假"
是以下面的做法是對的:
int a = 10;if (a) {
printf("條件成立");
} else {
printf("條件不成立");
}
因為a不為0,是以為"真",輸出結果是:
若是在Java中,編譯器直接報錯了,因為if的括号()中隻能放boolean類型的值。
以此類推,下面的寫法也是對的:
int a = 10;if (a = 0) {
printf("條件成立");
} else {
printf("條件不成立");
}
上述代碼是完全合理的,編譯器不會報錯,隻是個警告而已。因為a為0,是以為"假",輸出結果是:
這樣看來,C語言似乎比Java友善很多,其實有很大的陷阱在這裡:
假設你本來是想判斷a是否為0,那麼本應該寫if (a == 0),若你誤寫成了if (a = 0),那将是一件非常可怕的事情,因為編譯器又不報錯,這樣的BUG就難找了。是以,像a==0這樣的表達式,最好寫成0==a,若你誤寫成0=a,編譯器會直接報錯的。
// 不推薦if (a == 0) {
}// 推薦if (0 == a) {
}
* 在C語言中,可以不儲存關系運算的結果
是以,下面的寫法是合法的:
1 int a = 10;2 a > 10;3 a == 0;
如果是在Java中,第2、3行編譯器會直接報錯,但在C編譯器看來是合法的,隻是個警告。
是以,這裡又是一個陷阱,假設你的本意是想給
a指派為0,那麼本應該寫a = 0; ,若你誤寫成a == 0;
,那将又是一個非常難找的BUG,因為編譯器根本不會報錯。在1993年的時候,這個BUG差點讓一樁價值2000萬美元的硬體産品生意告吹,因為如果這
個BUG不解決,這個産品就沒辦法正常使用。
3.邏輯運算符
- && 邏輯與運算符
- || 邏輯或運算符
- ! 邏輯非運算符
邏輯運算的結果也隻有兩個:成立就為"真",傳回1;不成立就為"假",傳回0
4.指派運算符
1.簡單的指派運算符 = :int a = 5;
2.複合指派運算符
- += 加指派運算符。如a += 3+1,等價于 a = a +(3+1)
- -= 減指派運算符。如a -= 3+1,等價于 a = a -(3+1)
- *= 乘指派運算符。如a *= 3+1,等價于 a = a *(3+1)
- /= 除指派運算符。如a /= 3+1,等價于 a = a /(3+1)
- %= 取餘指派運算符。如a %= 3+1,等價于 a = a %(3+1)
5.自增運算符和自減運算符
- ++ 自增運算符。如a++,++a,都等價于a = a+1
- -- 自減運算符。如a--,--a,都等價于a = a-1
6.逗号運算符和逗号表達式
* 逗号運算符主要用于連接配接表達式,例如:
1 int a = 9;2 int b = 10;3 4 a = a+1 , b = 3*4;
* 用逗号運算符連接配接起來的表達式稱為逗号表達式,它的一般形式為:
表達式1, 表達式2, … …, 表達式n
逗号表達式的運算過程是:從左到右的順序,先計算表達式1,接着計算表達式2,...,最後計算表達式n
* 整個逗号表達式的值是最後一個表達式的值
1 int a = 2;2 int b = 0;3 int c;4 5 c = (++a, a *= 2, b = a * 5);
6 7 printf("c = %d", c);
++a的結果為3,a *= 2的結果為6,b = a * 5的結果為30。是以,輸出結果為:
這裡要注意的是,右邊的表達式是有用括号()包住的,如果不用括号包住,也就是:
c = ++a, a *= 2, b = a * 5;
printf("c = %d", c);
輸出結果将為:,因為c = ++a也屬于逗号表達式的一部分,跟後面的a *= 2以及b = a * 5是互相獨立的
7.條件運算符和條件表達式
其實就是三目運算符,一般形式為:表達式1 ? 表達式2 : 表達式3
int a = (b > 5) ? 10 : 9;
8.sizeof
* sizeof可以用來計算一個變量或者一個常量、一種資料類型所占的記憶體位元組數。
int size = sizeof(10);
printf("10所占的位元組數:%d", size);
輸出結果:,10是int類型的資料,在64bit編譯器環境下,int類型需要占用4個位元組
* sizeof一共有3種形式
- sizeof( 變量\常量 )
sizeof(10);char c = 'a';sizeof(c);
- sizeof 變量\常量
sizeof 10;char c = 'a';sizeof c;
sizeof(float);