56 C 逗號運算子

2021-08-27 13:48:43 字數 1797 閱讀 3230

正如讀者看到的,語句塊允許把兩條或更多條語句放到按c++語法只能放一條語句的地方。逗號運算子對表示式完成同樣的任務,允許將兩個表示式放到c++句法只允許放乙個表示式的地方。例如,假設有乙個迴圈,每輪都將乙個變數加1,而將另乙個變數減1.在for玄幻控制部分的更新部分中完成這兩項工作將非常方便,但迴圈句法只允許這裡包含乙個表示式。在這種情況下,可以使用逗號運算子將兩個表示式合併為乙個:

++j , --i;

逗號並不總是逗號運算子。例如,下面這個宣告中的逗號將變數列表中相鄰的名稱分開:

int i,j;

下列程式在乙個程式中使用了兩次逗號運算子,該程式將乙個string類物件的內容反轉。也可以使用char陣列來編寫該程式,但可輸入的單詞長度將受char陣列大小的限制。注意,下列程式將陣列中的字元順序反轉。該程式還使用了語句塊將幾條語句組合成一條。

an array

#include#includeint main()

{ using namespace std;

cout<

string word;

cin>>word;

char temp;

int i,j;

for( j=0,i=word.size()-1;j下面是該程式的運**況

順便說一句,在反轉字串方面,string類提供了更為簡潔的方式。以後將繼續介紹。

1.程式說明

看下上面程式的for迴圈控制部分。

首先,它使用逗號運算子將兩個初始化操作放進控制部分第一部分的表示式中。然後,再次使用逗號運算子將兩個更新合併到控制部分最後一部分的表示式中。

接下來是迴圈體。程式用括號將幾條語句合併為乙個整體。在迴圈體中,程式將陣列第乙個元素和最後乙個元素調換,從而將單詞反轉過來。然後,它將j加1,將i減1,讓它們分別指向第二個元素和倒數第二個元素,然後將這兩個元素調換。注意,測試條件j需要注意的另一點是,宣告temp,i,j的位置。**在迴圈之前宣告i和j,因為不能用逗號運算子將兩個宣告組合起來。這是因為宣告已經將逗號用於其他用途——分隔列表中的變數。也可以使用乙個宣告語句表示式來建立並初始化兩個變數,但是這樣看起來有些亂:

int j=0,i =word.size() -1;

在這種情況下,逗號只是乙個列表分隔符,而不是逗號運算子,因此該表示式對j和i進行宣告和初始化。然而,看上去好像只宣告了j。

另外,可以在for迴圈內部宣告temp:

int temp = word[i];

這樣,temp在每輪迴圈中都將被分配和釋放,這比在迴圈前宣告temp的速度要慢一些。另一方面,如果在迴圈內部宣告temp,則它將在迴圈結束後被丟棄。

2.逗號運算子花絮

到目前為止,逗號運算子最常見的用途是將兩個或更多的表示式放到乙個for迴圈表示式中。不過c++還為這個運算子提供了另外兩個特性。首先,它確保先計算第乙個表示式,然後計算第二個表示式(換句話說,逗號運算子是乙個順序點)。如下所示的表示式是安全的:

int = 20,j = 2*i

其次,c++規定,逗號表示式的值是第二部分的值。例如,上述表示式大的值為40,因為j=2*i的值為40。在所有運算子中,逗號運算子的優先順序是最低的。例如,下面的語句:

cata = 17,240;

被解釋為:

(cata=17),240;

也就是說,將cata設定為17,240不起作用。然後,由於括號的優先順序最高,下面的表示式將把cata設定為240——逗號右側的表示式值:

cata = (17,240);

C 逗號運算子

exp1,exp2,exp3,expn 運算子中每個表示式exp i 都會被計算,且整個逗號表示式的最終結果為最後乙個表示式expn的值。include include int main return exit success 最終輸出結果 ok。while中含有的條件判別式是乙個逗號表示式。系統首...

c 逗號運算子

逗號運算子含有兩個運算物件,按照從左向右的順序依次求值。對於逗號運算子,首先對左側表示式求值,然後將求值結果丟棄。逗號運算子真正的結果是右側表示式的值。逗號運算子經常被用在for迴圈中 include includeusing namespace std int main vector size t...

逗號運算子

在c語言中,多個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後乙個表示式的值。假設b 2,c 7,d 5,a1 b,c d 3 a2 b,c d 3 對於第一行 有三個表示式,用逗號分開,所以最終的值應該是最後乙個表示式的值,也就是d 3,為8,所以a1 8。對於第...