程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 運算符

運算符

編輯:關於C語言

2.復合運算符

(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) ,第二個參數裡面使用了逗號運算符。

(3)sizeof 和typedef

sizeof: 返回類型是size_t(無符號整型),注意size_t在不同的平台是不同的類型,有些平台是unsigned long long類型

用法:

         1.sizeof 表達式

         2.sizeof(類型)

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved