【C語言】07-基本語句和運算

說明:這個C語言專題,是學習iOS開發的前奏。也爲了讓有面嚮對象語言開發經驗的程序員,能夠快速上手C語言。如果你還沒有編程經驗,或者對C語言、iOS開發不感興趣,請忽略

一、基本語句

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; // true

boolean b2 = 5 < 4; // false

C語言中沒有boolean類型

在C語言中,關係運算的結果爲"真"就返回1,"假"就返回0

int a1 = 5 > 4; // 1

int 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( 數據類型 )
sizeof(float);

注意,不可以寫成sizeof float;

發佈了0 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章