複雜的表示式如何求值?

2021-10-02 22:24:44 字數 743 閱讀 7230

0.4.0.2表示式的求值

將表示式根據運算子的優先順序和結合性用括號分解為子表示式。請看下例:

a=b+

=c++

-d+--e/f;

過程略

結果為

a=

(b+=((

(c++

)-d)+(

(--e)/(

-f))))

);

0.4.0.3子表示式的求值

c語言沒有明確規定子表示式求值的順序(除了含有邏輯與、邏輯或、條件、逗號運算子的子表示式中)。請看下例:

(a+b)

*(c-d)

;

我們無法確定這兩個子表示式哪個先計算。不管子表示式的計算順序如何,表示式的結果往往都有相同值,。但是,當子表示式改變了某個運算元的值時,結果就不確定了。請看下例:

int a=

5,b,c;

c=(b=a+2)

-(a=1)

;

在第二個語句中這兩個子表示式求值順序不同,第二條語句產生的結果就不同。因此,在表示式中,既在某處訪問變數的值又在某處修改變數的值是不可取的。為了避免這樣的問題,乙個很好的方法就是:不要在子表示式中使用賦值運算子

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...

表示式求值

既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...

表示式求值

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...