c語言中,p1的計算優先順序,c語言中運算子有哪幾種,優先順序順序是怎樣

2021-03-03 20:27:06 字數 9192 閱讀 3747

1樓:文化廚子

這是複合賦值表示式。等同於:

*p = *p + 1; //指標p所指向的內容加1後儲存到指標p所指向的地址中。

所以,優先順序是先算*,在這裡*運算子並不是乘法運算子,而是指的間接引用運算子,然後再算+運算子。

2樓:匿名使用者

*運算子的優先順序高於符合運算子+=,即*p += 1的功能等同於++(*p)或(*p)++,也就是說,增加的是p指向的內容,而不是改變指標的指向。

3樓:匿名使用者

*p+=1

首先是p+=1也就是p++

然後再*p,也就是間接引用,

你也可以這樣理解,*(p+=1)語法有錯哦,只是幫你理解而已

4樓:匿名使用者

*p=*p+1;過細的不講了,怕誤人子弟;自己看看優先順序,就知道怎麼算了,最主要是知道+=;*=;-=;這些是什麼語法,如果你知道就不會問了

5樓:匿名使用者

應該是先加的 因為*p++中是先加的

6樓:匿名使用者

先*p然後再*p加1

c語言中運算子有哪幾種,優先順序順序是怎樣

7樓:楓璽

c語言中,運算子除了常見的三大類,算術運算子、關

系運算子與邏輯運算子之外,還有一些用於完成特殊任務的運算子。

運算子的運算優先順序共分為15 級,1 級最高,15 級最低。 在表示式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算子 優先順序相同時,則按運算子的結合性所規定的結合方向處理。

一級運算子:標識,常量,字串文字量,優先順序提升表示式最優先執行。

二級運算子:陣列下標運算(expression)、函式呼叫(argument-expression-list)、成員訪問(identifier、 -> identifier)、字尾自增(i++)、字尾自減(i--)、 複合初始化(initializer-list)。

**運算子:字首自增(++i)、字首自減(--i)、單目轉型表式式(取地址& ,提領 * , 正號+ ,負號-、 位反~ 邏輯否!)、求型別長度(sizeof unary-expression)。

四級運算子:強制表示式成為type-name指定的型別( type-name ) cast-expression。

五級運算子:「 * 」 乘法運算子。

六級運算子:「 + 」加法運算子。

七級運算子:<< 左移運算子;>> 右移運算子。

八級運算子:<、<=、>、>=關係運算子。

九級運算子:「 == 」等於運算子;「 != 」不等於運算子。

十級運算子:「 & 」按位與運算子。

十一級運算子:「 ∧ 」按位異或運算子。

十二級運算子:「 | 」按位或運算子。

十**運算子:「&&」邏輯與運算子。

十四級運算子:「 || 」邏輯或運算子。

十五級運算子:? :條件運算子。

擴充套件資料

c語言中各運算子的結合性:

1、左結合性(自左至右):

例如算術運算子的結合性是自左至右,即先左後右。如有表示式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合方向就稱為「左結合性」。

2、右結合性(自右至左)

自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算子是賦值運算子。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。

c語言運算子中有不少為右結合性,應注意區別,以避免理解錯誤。

8樓:匿名使用者

c語言的運算子包括單目運算子、雙目運算子、三目運算子,優先順序如下:

第1優先順序:各種括號,如()、等、成員運算子 . ;

第2優先順序:所有單目運算子,如++、--、!、~等;

第3優先順序:乘法運算子*、除法運算子/、求餘運算子%;

第4優先順序:加法運算子+、減法運算子-;

第5優先順序:移位運算子<<、>>;

第6優先順序:大於運算子》、大於等於運算子》=、小於運算子<、小於等於運算子<=;

第7優先順序:等於運算子==、不等於運算子!=;

第8優先順序:按位與運算子&;

第9優先順序:按位異或運算子^;

第10優先順序:按位或運算子|;

第11優先順序:邏輯與運算子&&;

第12優先順序:邏輯或運算子||;

第13優先順序:三目條件運算子 ?: ;

第14優先順序:各種賦值運算子,如=、+=、-=、*=、/= 等;

第15優先順序:逗號運算, 。

9樓:

優先順序 運算子 含義 運算子型別 結合方向

15 () 圓括號 單目 自左向右

下標運算子

—> 指向結構體成員運算子

、 結構體成員運算子

14 ! 邏輯非運算子 自右向左

~ 按位取反運算子

++ 自增運算子

-- 自減運算子

- 負號運算子

(型別) 型別轉換運算子

* 指標運算子

& 地址運算子

sizeof 長度運算子

13 * 乘法運算子 雙目 自左向右

/ 除法運算子

% 求餘運算子

12 + 加法運算子

- 減法運算子

11 << 左移運算子

>> 右移運算子

10 <、<=、>、>= 關係運算子

9 == 等於運算子

!= 不等於運算子

8 & 按位與運算子

7 ^ 按位異或運算子

6 | 按位或運算子

5 && 邏輯與運算子

4 || 邏輯或運算子

3 ?: 條件運算子 三目 自右向左

2 =、+=、-=、*=、

/=、%=、>>=、

<<=、&=、^=、|= 賦值運算子 雙目

1 , 逗號運算子 雙目 自左向右

中國物聯網校企聯盟技術部

10樓:聽不清啊

c語言的運算子主要用於構成表示式,同一個符號在不同的表示式中,其作用並不一致。下面按計算的優先順序,分別說明不同作用的表示式。需要特別指出,在c語言標準中,並沒有結合性的說法。

相同優先順序運算子,從左至右依次運算。注意字尾運算優先順序高於字首。因此++i++應解釋為++(i++)。

而與或非的運算優先順序都不一樣,因此a && b || b && c解釋為(a && b) || (b && c)

合理使用優先順序可以極大簡化表示式。

基本表示式 1級

基本表示式(primary expressions),主要是用於運算子之間,做為運算數。

標識,常量,字串文字量,優先順序提升表示式最優先執行。

優先順序提升表示式是指圓括號包圍的表示式,如「( expression )」

字尾表示式 2極

postfix-expression [ expression ],陣列下標運算。

postfix-expression ( argument-expression-list),函式呼叫,括號內的引數可選。

postfix-expression . identifier,成員訪問,

postfix-expression -> identifier,成員訪問,->號之前應為指標。

postfix-expression ++,字尾自增

postfix-expression --,字尾自減

( type-name )

( type-name ) 複合初始化,c99後新增。例如

int* a = (int) ;

//等價於 int unamed = ; //unamed表示一個不可見的變數名。

int* a = unamed;

單目/一元運算 3級

++ unary-expression 字首自增

-- unary-expression 字首自減

unary-operator cast-expression 單目轉型表式式, 包括 取地址& ,提領 * , 正號+ ,負號- 位反~ 邏輯否!。

sizeof unary-expression 求型別長度,對表示式求型別長度

sizeof ( type-name ) 求型別長度

強制型別表示式 4級

( type-name ) cast-expression,強制表示式成為type-name指定的型別。

乘法表示式 5級

「 * 」 乘法運算子;「 / 」除法運算子;「 % 」 取餘運算子。

加法運算子 6級

「 + 」加法運算子;「 - 」減法運算子。

移位運算子 7級

<< 左移運算子;>> 右移運算子。

關係運算子 8級

<、<=、>、>=關係運算子。

相等運算子 9級

「 == 」等於運算子;「 != 」不等於運算子。

位與運算子 10級

「 & 」按位與運算子

位異或運算子 11級

「 ∧ 」按位異或運算子(bitwise exclusive or operator)。

位或運算子 12 級

「 | 」按位或運算子(bitwise inclusive or operator)。

邏輯與運算子 13級

「&&」邏輯與運算子。

邏輯或運算子 14 級

「 || 」邏輯或運算子。

三元條件運算子 15級

? :條件運算子。

賦值運算子 16 級

=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算子。

逗號運算子 17級

「,」逗號運算子。

[pre]c 語言中,逗號(,)也可以是運算子,稱為逗號運算子(***ma operator)。逗號運算子可以把兩個以上(包含兩個)的表示式連線成一個表示式,稱為逗號表示式。其一般形式為:

子表示式1, 子表示式2, ..., 子表示式n

例如:a + b, c = b, c++

逗號運算子的優先順序是所有運算子中級別最低的,通常配合 for 迴圈使用。逗號表示式最右邊的子表示式的值即為逗號表示式的值。上例中,c++ 的值(c 自增之前的值)即為該表示式的值。

逗號運算子保證左邊的子表示式運算結束後才進行右邊的子表示式的運算。也就是說,逗號運算子是一個序列點,其左邊所有***都結束後,才對其右邊的子表示式進行運算。因此,上例中,c 得到 b 的值後,才進行自增運算。

優先順序:c語言中,運算子的運算優先順序共分為15 級。1 級最高,15 級最低。

在表示式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算子 優先順序相同時,則按運算子的結合性所規定的結合方向處理。

結合性:c語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算子的結合性是自左至右,即先左後右。

如有表示式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。

最典型的右結合 性運算子是賦值運算子。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。c語言運算子中有不少為右結合性,應注意區別,以避免理解錯誤。

優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。

所有的優先順序中,只有三個優先順序是從右至左結合的,它們是單目運算子、條件運算子、賦值運算子。其它的都是從左至右結合。

具有最高優先順序的其實並不算是真正的運算子,它們算是一類特殊的操作。()是與函式相關,與陣列相關,而->及.是取結構成員。

其次是單目運算子,所有的單目運算子具有相同的優先順序,因此在我認為的 真正的運算子中它們具有最高的優先順序,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。

另外在c語言裡,沒有前置後置之分,因為++ -- 是右結合所以右側優先運算,表現為 "運算元後置優先順序比較高" 的假象,前置和後置的區分是因為運算子過載而後加入c++的

接下來是算術運算子,*、/、%的優先順序當然比+、-高了。

移位運算子緊隨其後。

其次的關係運算子中,< <= > >=要比 == !=高一個級別,不大好理解。

所有的邏輯操作符都具有不同的優先順序(單目運算子除外,!和~)

邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。

跟在其後的&&比||高。

接下來的是條件運算子,賦值運算子及逗號運算子。

在c語言中,只有4個運算子規定了運算方向,它們是&&、| |、條件運算子及賦值運算子。

&&、| |都是先計算左邊表示式的值,當左邊表示式的值能確定整個表示式的值時,就不再計算右邊表示式的值。如 a = 0 && b; &&運算子的左邊位0,則右邊表示式b就不再判斷。

在條件運算子中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。

賦值表示式則規定先對右邊的表示式求值,因此使 a = b = c = 6;成為可能。

口訣註釋

優先順序等級口訣

圓方括號、箭頭一句號, 自增自減非反負、針強地址長度,

乘除,加減,再移位,

小等大等、等等不等,

八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗。

其中「,」號為一個等級分段。

優先順序等級註釋

「圓方括號、箭頭一句號」指的是第15級的運算子。其中圓方括號很明顯「()、」,箭頭 指的是指向結構體成員運算子「->」,句號 指的是結構體成員運算子「.」 ;

「自增自減非反負、針強地址長度」指的是第14級的運算子。其中 非 指的是邏輯運算子「!」,反 指的是按位取反運算子「~」,負 指的是負號運算子「-」,針 指的是指標運算子「*」,強 指的是強制型別轉換運算子,地址 指的是地址運算子「&」,長度 指的是長度運算子「sizeof 」;

「乘除,加減,再移位」移位指的是左移運算子「<<」和右移運算子「>>」,其中除法還包括了 取餘運算子「%」;

「小等大等、等等不等」 指的是第10級到第9級的運算子:<、<=、>和》=,等等指的是等於運算子==,不等指的是不等於運算子!=

「八位與,七位異,六位或」其中 八位與 指的是第8級的 按位與 運算子「&」,七位異 指的是第7級的按位異或運算子「^」,六位或 指的是第6級的按位或運算子「|」;

「五與,四或」指的是第5級、第4級的邏輯與運算子「&&」和邏輯或運算子「||」;

「三疑,二賦,一真逗」指的是第3級到第1級的運算子。其中,三疑指的是條件運算子「?:」 (三有雙重含義:

即指優先順序別是三,它的運算子型別也是三目,疑也取「?」之意),二賦 指的是賦值運算子=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第1級的「,」運算子,真字只是為了語句需要罷了。

由於c語言的運算子優先順序與c++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於c++.但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握c++的優先順序的!

應用舉例

1、賦值運算子:a=5;

a=b=0;

第一個賦值語句把5賦給變數a;第二個賦值語句的意思是把0同時賦值給兩個變數。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算,先b=0,然後a=b。

2、複合賦值運算子:a=1;a+=3;

上面第二個賦值語句等價於a=a+3;即a=4。

3、算術運算子:area=height*width;num=num1+num2/num3-num4;

第一個賦值語句height和width相乘結果賦給變數area;第二個賦值語句先完成num2與num3的整除運算,然後與num1相加,再減去num4,結果賦給num。運算子運算順序先算乘除再算加減。單目正和單目負最先運算。

4、邏輯運算子:a=1,b=1;

a||b-1;

因為a=1為真值,所以不管b-1是不是真值,總的表示式一定為真值,這時後面的表示式就不會再計算了。

5、關係運算子:if(a>0)...

如果a>0,則執行if語句中的內容,否則退出。

6、條件運算子:a=(b>0)?b:-b;

當b>0時,a=b;當b不大於0時,a=-b;其實上面的意思就是把b的絕對值賦值給a。

7、逗號運算子:b=2,c=7,d=5;

a=(++b,c--,d+3);

有三個表示式,用逗號分開,所以最終的值應該是最後一個表示式的值,也就是d+3=8,所以a=8。

8、位邏輯運算子

包括:1。&位與符 2。|位或符 3。^位異或符 4。~位取反符

以運算元12為例。位運算子將數字12視為1100。位運算子將運算元視為位而不是數值。數值

可以是任意進位制的:十進位制、八進位制或十六進位制。位運算子則將運算元轉化為二進位制,並相應地返回1或0。

位運算子將數字視為二進位制值,並按位進行相應運算,運算完成後再重新轉換為數字。例如:

表示式10&15表示(1010 & 1111),它將返回表示1010的值10。因為真真得真,或者是11得1,同位全是1結果也是1

表示式10|15表示(1010 | 1111),它將返回表示1111的值15。假假得假。全零得零。

表示式10^15表示(1010 ^ 1111), 它將返回表示0101的值5。此時是同性相斥,相同的就為假。

表示式~10表示(~1010),它將返回表示0101的值 -11。此號好理解,按位取反。

c語言中與的優先順序,C語言中和的優先順序問題

1,1,1,true 1賦值給c,c賦給b,b賦給a。然後,第二個表示式的話結果肯定是布林值,而有題目觀之,此表示式不為0,所以d為true 優先順序 輸出是2 1 1 1 a b c 等同於 a b c 而對於 來說,先算左邊表示式的值 和ll運算子都是同一優先順序的,是自左向右結合運算,該程式的...

c語言中算術運算子優先順序的問題C語言中算術運算子優先順序的問題

1級優先順序 左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 2級優先順序 右結合 邏輯非運算子 按位取反運算子 字首增量運算子 字首增量運算子 正號運算子 負號運算子 型別 型別轉換運算子 指標運算子 地址與運算子 sizeof 長度運算子 3級優先順序 左結合 乘法運算子 除...

C語言指標的優先順序是多少,c語言中,他們的優先順序是一樣的嗎

a 和 a 結果一樣,a 是整句語句做完了才 所以有沒括號都一個樣.的優先順序是2 的優先順序也是2 結合方向是從右到左,故先運算 再運算 c語言中,他們的優先順序是一樣的嗎 由於 號有表示指標的一元運算子和表示乘法的二元運算子之分。所以,在表示指標時是高於 和 的 是 這三個嗎?若是,他們的優先順...