5.4.1 表達式數組
表達式是由運算符和操做數組合構成的。最簡單的表達式是一個單獨的操做數,以此做爲基礎能夠創建複雜的表達式。函數
每個表達式都有一個值code
C的一個重要屬性是每個C表達式都有一個值。對象
5.4.2 語句io
語句是構造程序的基本成分。程序是一系列帶有某種必須的標點的語句集合。一條語句是一條完整的計算機指令。在C中,語句用結束處的一個分號標識。class
什麼構成了一條完整的指令?首先,C把任何後面加有一個分號的表達式看處是一個語句。基礎
儘管一個語句(或者至少是一個有做用的語句)是一條完整的指令,但不是全部完整的指令都是語句。分號用來識別確實是語句的指令。變量
程序清單 5.13object
/*addemup.c--4種類型的語句*/ #include <stdio.h> int main() { int count,sum; /*聲明語句*/ count=0; /*賦值語句*/ sum=0; /*同上 */ while (count++<20)/*while 語句*/ { sum=sum+count; }; print("sum=%d\n",sum);/*函數語句*/ return 0; }
上例中已經遇到了四種語句:循環
注意一個聲明語句不是一個表達式;
賦值語句,它爲變量分配一個值。賦值語句是表達式語句的一個特例。
函數語句引發函數的執行。
while語句有三個不一樣的部分,首先是while關鍵字,而後是在圓括號裏的一個判斷條件,最後是知足判斷條件時將執行的語句。while語句屬於一類有時被稱爲結構化語句的語句。
反作用和順序點
反作用是對數據對象或文件的修改。例如語句states=50;的反作用是將變量states的值設置爲50.這是反作用?這看起來更像是主要目的!然而,從C的角度來看,主要目的是對錶達式求值。
給C的一個表達式4+6,C將計算它的值爲10,給C一個表達式 states=50 ,C將計算它的值爲50,計算這個表達式的反作用就是把變量states的值改變爲50.增量和減量運算符也有反作用,它們主要因爲反作用而被應用。
一個順序點(sepuence point)是程序執行中的一點;在該點處,全部的反作用都在進入下一步前被計算。在C中,語句的分號標誌了一個順序點。它意味着在一個語句中賦值運算符、增量及減量運算符所作的所有改變都必須在進入下一個語句前發生。任何一個完整的表達式的結束也是一個順序點。
什麼是一個完整的表達式呢?它不是一個更大的表達式的子表達式。完整表達式的例子包括一個表達式語句裏的表達式和一個在while循環裏做爲判斷條件的表達式。
順序點幫助闡明後綴增量動做什麼時候發生。例如:
while (guests++<10)
printf("%d \n",guests);
有時初學者會設想在本程序中「先使用該值,而後增長它的值」的意思是在使用了printf()語句後再增長guest的值。然而,guests++<10是while循環的判斷條件,因此它是一個完整的表達式,這個表達式的結束就是一個順序點。所以C保證反作用(增長guests的值)在進入printf()前發生。
同時使用後綴形式保證了guests在與10比較後才增長。
如今考慮這個語句:
y=(4+ x++)+(6+ x++);
表達式4 + x++不是一個完整表達式,因此C不能保證在計算子表達式4+x++後當即增長x。這裏完整表達式是整個語句,而且分號標記了順序點,因此C能保證的是在程序進入後續語句前x將被 增長兩次。C沒有指明X是在每一個子表達式計算後被增長仍是整個表達式被計算後增長,這就是咱們要避免使用這類語句的緣由。
5.4.3 複合語句(代碼塊)
複合語句是用花括號組織起來的兩個或更多的語句;它也被稱爲代碼塊。