運算符

2.複合運算符ide

(1)i+=1和i=i+1的區別:前者是i的值只計算一次,然後者i的值會計算兩次。函數

例:a[foo()]+=1和a[foo()]=a[foo()]+1,若是foo()函數打印一條消息,那麼前者只會打印一次,然後者會打印兩次消息。產品

(2)逗號運算符:先求左邊的值,求完值後把值丟掉,右邊做爲整個表達式的值變量

函數的實參也是使用逗號分開參數,可是也能夠寫成: f (a,(t=2,t+3),c) ,第二個參數裏面使用了逗號運算符。co

(3)sizeof 和typedefblock

sizeof: 返回類型是size_t(無符號整型),注意size_t在不一樣的平臺是不一樣的類型,有些平臺是unsigned long long類型消息

用法:運算符

         1.sizeof 表達式參數

         2.sizeof(類型)undefined

typedef:類型定義或者通俗的說給類型起別名

例:typedef  unsigned long size_t,那麼size_t就是unsigned long類型

3.Side Effect和Sequence Point

a=(++a)+(++a)+(++a)+(++a)   最後a的值是undefined

Sequence :調用一個了函數可能產品Side Effect,或者++=,—= 這樣的複合運算符也可能產生Side Effect.

Side Effect的計算順序沒法肯定。

在庫函數返回時是Sequence Point.

邏輯與(&&)和邏輯或(||):求值順序:先求左值,右值可能不會計算或者說求值。

1.在兩個Sequence Poine之間的多個Side Effect的順序不肯定,那麼在之間的變量容許被改變一次。

2.同時在兩個Sequence Point之間既要讀一個變量的值又要改它的值,只有在讀寫順序肯定的狀況下才能夠這麼寫,好比a[i++]=i和i=i+1,前者的順序沒法肯定,後者的計算順序是肯定的。

例: a=(++a)+(++a)+(++a)+(++a)   最後a的值是undefined

相關文章
相關標籤/搜索