-
1 # 使用者5728667285680
-
2 # pietr49411
表示式,是由數字、算符、數字分組符號(括號)、自由變數和約束變數等以能求得數值的有意義排列方法所得的組合。約束變數在表示式中已被指定數值,而自由變數則可以在表示式之外另行指定數值。給與自由變數一些數值指定,可能可以給與一個表示式數值,即使對於一些自由變數的值,表示式或許沒有定義。因此,一個表示式代表一個函式,其輸入為自由變數的定值,而其輸出則為表示式因之後所產生出的數值。也有人這樣解釋:表示式是運算子、運算元和標點符號組成的序列,其目的是用來說明…個計算過程。 表示式可以巢狀,例如:2+3+(5*sizeof(int))/345。 表示式根據某些約定、求值次序、結合和優先順序規則來進行計算。 所謂約定,即型別轉換的約定。例如: float a; a=5/2; 結果。得到值為2。5/2是整數除法取整, 因為5和2都是整數,不會由於a是float型而輕易改變運算的性質。 所謂求值次序,是指表示式中各個運算元的求值次序視編譯器不同而不同。見3.9節。 所謂結合性,是指表示式中出現同等優先順序的運算子時,該先做哪個操作的規定。例如: d=a+b-c; //C++規定,加減法先左後右,先做a+b,其結果再減去c d=a=3; //C++規定,等號是先右後左。先做a=3,其結果再賦給d 所謂優先順序,是指不同優先順序的運算子,總是先做優先順序高的操作。例如: d=a+b*c; //乘法優先順序比加法高。先做b*c,其結果再與a相加語句指的是當程式執行時執行某個動作的語法結構。它改變變數的值,產生輸出,或處理輸入。C++ Primer第六章說:語句類似於自然語言中的句子。C++語言既有隻完成單一任務的簡單語句,也有作為一個單元執行的有一組語句組成的複合語句。個人認為,和我們說話所說的句子一樣的,只是我們寫作文用句號結束一個句子,而C++用分號……也就是說,你看到一個分號就表示一個語句。而語句與表示式的區別可以說就在於這個分號。表示式語句——在表示式的末尾加分號就形成了一個表示式語句。不過簡單的講"表示式"(expression)是一個單純的運算過程,總是有返回值;"語句"(statement)是執行某種操作,沒有返回值。關鍵就在這每個表示式都有一個值!!!表示式與語句的區別就在於表示式有返回值,語句沒有、語句可以包含表示式,表示式加個分號就是語句。個人見解,有誤請指正。
回覆列表
簡單來說,表示式就是會返回一個值的語句。C 中大多數語句都是有返回值的表示式。但是 if while for return 語句這種控制結構,應該不是表示式,我想這應該是語句高於表示式的意思。(另外,函式結構定義不知道算不算語句我也不清楚,捉急)函式式語言(不是純函式式)一個重要的觀點是把副作用和無副作用區分開,其實就是把表示式和其他語句區分開。也就是說返回一個有用的值的語句,它所做的工作就永遠只是返回一個值,不能偷偷做別的事。比如說吧,C裡面常常這樣用迴圈while (foo = bar)這裡面,foo = bar 是一個賦值語句,同時它返回一個值,你可以 printf 一下,返回值就是 bar 。這種情況下,foo = bar 其實做了兩件事,賦值以及返回一個值。這就被認為是混用表示式和其它語句的場景,這種情況下,一個語句有兩個意義,不光不直觀容易出錯,也不美(如果認為短小就是美那我無話可說,妹子們不知道有沒有話可說)。在函式式語言裡,賦值的返回值是空的(NULL void ……)。while (foo) {…… foo = bar;}