㈠ c語言,條件運算符:,結合方向從右到左是什麼意思,求詳解
之前的回答有誤,應以此為准,轉自網頁鏈接
條件運算符?:是右結合的。因此,表達式
a ? b : c ? d : e
a ? b ? c : d : e
分別等同於
a ? b : (c ? d : e)
a ? (b ? c : d) : e
以下為之前的原答案,為了大家知道評論區在說什麼,特此保留
#include<stdio.h>
intmain(){
intx=1,y=2;
intc=0;
(x>y?printf("1"):(c==0)?printf("2"):printf("3"));/*這里就是從右到左結合
先把(c==0)?printf("2"):printf("3")當成一個整體
再把(x>y?printf("1"):(c==0)?printf("2"):printf("3"));當成一個整體*/
return0;
}
輸出是2
㈡ c語言中條件運算 結合方向 從右到左 什麼意思
在標准C語言的文檔里,對操作符的結合性並沒有作出非常清楚的解釋。一個滿分的回答是:它是仲裁者,在幾個操作符具有相同的優先順序時決定先執行哪一個。 每個操作符擁有某一級別的優先順序,同時也擁有左結合性或右結合性。優先順序決定一個不含括弧的表達式中操作數之間的「緊密」程度。例如,在表達式a*b+c中,乘法運算的優先順序高於加法運算符的優先順序,所以先執行乘法a*b,而不是加法b+c。 但是,許多操作符的優先順序都是相同的。這時,操作符的結合性就開始發揮作用了。在表達式中如果有幾個優先順序相同的操作符,結合性就起仲裁的作用,由它決定哪個操作符先執行。像下面這個表達式: int a,b=1,c=2; a=b=c; 我們發現,這個表達式只有賦值符,這樣優秀級就無法幫助我們決定哪個操作先執行,是先執行b=c呢?還是先執行a=b。如果按前者,a=結果為2,如果按後者,a的結果為1。 所有的賦值符(包括復合賦值)都具有右結合性,就是說在表達式中最右邊的操作最先執行,然後從右到左依次執行。這樣,c先賦值給b,然後b在賦值給a,最終a的值是2.類似地,具有左結合性的操作符(如位操作符「&」和「|」)則是從左至右依次執行。
㈢ a<b<c在c語言中看的順序是右到左還是左到右
沒關,標准C中規定的<的結合性是左結合 也就是從左向右算
這樣來看 a<b是假,值為0,然後 0<c 值為真,所以表達式的值為真
㈣ c語言參數傳遞是從右到左的嗎
是的,C語言函數參數一般是從右往左執行的
㈤ C語言運算的時候到底是從左往右還是從右往左算啊
相同優先順序從左到右,否則先算高優先順序
比如5+6*7是先算6*7再算5+42
5+6+7就是先算5+6再算11+7
㈥ c語言中運算符的結合方向什麼時候從左至右,什麼時候從右至左
左結合性:自左至右。
右結合性:自右至左。
一個運算量兩側的運算符優先順序相同時,按運算符的結合性所規定的結合方向處理。C語言中各運算符的結合性分為兩種,即左結合性和右結合性。
如,算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z則y應先與「-」號結合,執行x-y運算,然後再執行+z的運算。
而最典型的右結合性運算符是賦值運算符,如x=y=z,由於「=」的右結合性,應先執行y=z,再執行x=(y=z)運算。
(6)c語言從右往左看擴展閱讀
C語言中的運算符
(1)算術運算符(+,-,*,/,%,++,--)。
(2) 關系運算符(<, >, <=, >=, ==, ![KG-*8]=) 。
(3) 邏輯運算符(!, &&, ||) 。
(4) 位運算符(<<, >>, ~, |, ^, &) 。
(5)賦值運算符(=,及其雙目運算符的擴展賦值運算符)。
(6)條件運算符(?:)。
(7)逗號運算符(,)。
(8) 指針運算符(*, &) 。
(9)求位元組數運算符(sizeof)。
(10)強制類型轉換運算符((類型))。
(11) 分量運算符(·, ->) 。
(12)下標運算符([])。
(13)圓括弧運算符(())。
㈦ 請教c語言等編程語言優先順序的問題,對著這個優先順序的表看得不是很明白,有的從左往右,有的從右往左
運算符涉及到優先順序和結合性問題,」從左往右「和」從右往左「說的是運算符的結合性。優先順序決定表達式中各種不同的運算符起作用的優先次序,而結合性則在相鄰的運算符的具有同等優先順序時,決定表達式的結合方向。可以這樣理解:
首先,表達式中得有多個運算符,這樣就存在左右兩邊都有運算符的操作數:
1 如果這個操作數兩邊的運算符優先順序不同,則這個操作數屬於優先順序高的那個運算符,它優先參與優先順序高的運算符表示的運算;
2 如果這個操作數兩邊的運算符優先順序相同,則這個操作數屬於左右那個運算符,就要看著兩個運算符的結合性了(注意,相同優先順序的運算符必然有相同的結合性,否則此處就出現bug了),如果運算符結合性是」從左到右「,則操作數屬於左側的運算符,就是說運算符是從左側開始處理的;如果結合性是」從右到左「,則操作數屬於右側的運算符,這兩個同優先順序的運算符右側的先處理。
結合性舉例:
(1) a + b - c
b就是前面說的兩邊有兩個相同優先順序的操作數,+ 和 - 的結合性是」從左到又「,所以 + 先處理,- 後處理。
(2) a = b = c
b兩邊有兩個相同優先順序的運算符,= 結合性是」從右到左「,所以右側的 = 先處理,a = b = c 等價於 a = (b = c);同理,a = b += c 等價於 a = (b += c),因為 + 和 += 是相同優先順序的。
(3) *p++
p左右的兩個運算符優先順序相同,但都是」從右到左「結合性,所以這樣理解:*(p++)。
㈧ c語言printf函數運算順序為什麼從右到左
不是printf函數運算順序為什麼從右到左,而是類似的所有函數,包括算定義函數的參數計算都是從右至左。函數數有多個參數時計算總得有個順序吧?不是從左至右,就是從右至左,抑或從中間向兩邊;一句話選定一個順序後就「大家都這么辦」,總不能有些函數從左至右,有些函數從右至左吧,那編譯器就太難做了。當初選擇從右至左肯定是這樣有好多方便之處,比如printf中的參數表,由於C是基於棧操作的,棧又是後進先出的,從右至左計算壓棧,然後按彈出順序輸出到屏幕上剛好順應了大多數文本從左至右的習慣,很是方便;若從左至右計算壓棧,那也不是說不可以,但處理就沒有這么方便了。個人管見,供參考。
㈨ C語言中的從右向左的運算問題
給你一個例子,你就應該明白了; int x; int y=4; x = y++; 這個的結果,相信你應該知道,x = 4,y =5; 也就是說對於表達式y++而言,它的值是未加之前的值4,也就是說(y++)的結果是4; 同理,對於x = *(p++),首先,(p++)這個表達式的結果是p,也就是說(p+1)並不影響(p++)這個表達式的結果,所以x = *p,; 這個是由於自加運算表達式的特性決定的,這樣理解就不會有錯了