運算順序與 運算子優先順序和結合性

來源:互聯網
上載者:User

使用者:走盡天涯路)

==================================================
訊息組:群/校友錄()
==================================================
訊息類型:聊天記錄
==================================================

Ricky...
“當一個運算對象左右兩側的運算子的優先順序相同時,則由運算子的結合性,又稱結合方向或互聯性確定運算次序”何解?

2
我不知道你現在看的是什麼書,不過我覺得C++Primer很好,你可以先多看看這本書

2004-12-18 19:35:06
書沒有錯,但是通常好書講得比較透徹,並且會有很好的例子

2004-12-18 19:34:34 77)
哦...看來我的書說錯了?

2004-12-18 19:37:35 77)
剛才走盡天涯路說“結合性 是判斷 誰屬於誰”是這樣嗎?
 

2004-12-18 19:38:17 13)
C語言中只有少數幾個運算子是右結合的,所以當運算元左右兩邊運算子優先順序相同的情況下,多是先算左邊的……簡單地說:和算術是一樣的

2004-12-18 19:39:01 Ricky()
A+B+C,先算A+B,然後結果+C,不用弄得太複雜,需要注意的應該是優先順序

2004-12-18 19:40:48 走盡天涯路(
沒錯 前提是不要寫 二義性代碼

2004-12-18 19:40:57 走盡天涯路(
[:D]

2004-12-18 19:41:19 Ricky(
如果再不能保證自己的記憶力足夠好的時候,加上括弧……

2004-12-18 19:42:33 走盡天涯路(7)
要看看 那本書上是怎麼說的嗎

2004-12-18 19:42:38 學C新手(7)
要~~~~

2004-12-18 19:45:48 走盡天涯路(
a= b+c+d ; 實際情況是 c標準 並沒有對此做出明確的規定,在某些平台又或者某些情形下,可能編譯器是這樣的:
a = b+(c+d);

2004-12-18 19:46:22 走盡天涯路()
類似的 例子:
a = f( ) + g( );
 

2004-12-18 19:47:07 走盡天涯路()
編譯器 並不保證 f( ) 一定在 g( ) 之前 被求值。

2004-12-18 19:48:51 Ricky(
第一個不正確,算術運算子都是左結合的,所以,一定是先b+c,然後結果+d

2004-12-18 19:49:21 學C新手()
[:L]書也能錯啊?

2004-12-18 19:49:48 Ricky(1)
當年譚浩強的書就有很多錯誤

2004-12-18 19:50:20 走盡天涯路()
int i = 0;
while ( i<10 )
arrayTarger[i] = arraySource[i++];

是想:
while ( i<10 )
{ arrayTarget[i] = arraySource[i];
++i;}
 

2004-12-18 19:51:39 Ricky()
其實只有單目運算子、條件運算子還有賦值是右結合的,其他都是左結合

2004-12-18 19:52:32 走盡天涯路()
雖然i++返回自增前的i值,但問題是某些平台的編譯器並不能保證在i自增之前執行取址操作:
arrayTarger[i]

2004-12-18 19:53:37 走盡天涯路()
Ricky 那個例子 是書上專門提出的

2004-12-18 19:53:59 走盡天涯路(
用的是 c99標準吧

2004-12-18 19:54:06 Ricky(1)
呵呵,如果你不介意的話可以看看Lippman的Essential C++

2004-12-18 19:54:43 走盡天涯路()
[:'(]沒哪本書,還要去找啊

2004-12-18 19:55:20 學C新手()
你手裡好歹有本編譯原理,我還要買我這裡買書特麻煩

2004-12-18 19:57:05 走盡天涯路()
最後一個例子是89年的 ,不好意思

2004-12-18 19:58:11 走盡天涯路(4)
這本書偏向於 c不知道 c++ 和c一樣不

2004-12-18 20:04:19 走盡天涯路(
怎麼都不說話了

2004-12-18 20:04:31 走盡天涯路(
[?]

2004-12-18 20:04:46 學C新手(
[:8]我現在更搞不清楚結合性了...
所謂從右向左結合是指運算子和右邊的運算對象結合嗎?a**p等價於a*(*p)?????

2004-12-18 20:05:18 走盡天涯路(
等啊

2004-12-18 20:05:47 Ricky(
這個不是運算子,是類型定義,是另外一回事情。
a**p 意味著 p是一個指標,是指向a*類型的指標

2004-12-18 20:05:58 走盡天涯路(
其實我覺得 這本書的意思是 結合性 和運算順序是兩碼事

2004-12-18 20:06:31 Ricky(
同樣的道理
const int * p,p是指標,指向const int類型
int * const p,p是指標常量,指向int類型

2004-12-18 20:06:39 走盡天涯路(
有聯絡 但不同

2004-12-18 20:06:58 Ricky(
int const * p等同於const int *p

2004-12-18 20:07:07 天堂沒有雪(
哈哈

2004-12-18 20:07:15 Ricky(
在實際編程中,遇到的更多是優先順序問題

2004-12-18 20:07:20 天堂沒有雪(
a**p爽吧

2004-12-18 20:07:35 Ricky(
避免寫出容易被誤會的代碼就好了

2004-12-18 20:07:35 學C新手(
[:8]不爽

2004-12-18 20:08:23 走盡天涯路(
Ricky[:)]

2004-12-18 20:08:42 /kun流星雨(
[?]

2004-12-18 20:08:45 Ricky(1
錯了請大家指正,:)

2004-12-18 20:08:57 學C新手(
a**p 意味著 p是一個指標,是指向a*類型的指標
-----------------------------
int *p;
a*(*p)吧?

2004-12-18 20:09:50 天堂沒有雪(
[strong]

7(走盡天涯路) 20:06:53
這是結合性問題
學C新手) 20:11:09
那位大哥重新把結合性的概念定義一下?我暈死了~~~~~
( 流星雨) 20:12:11
聽聽就好
(Ricky) 20:12:12
Sorry,這個就是運算式了,但是同樣沒有什麼疑惑的啊,很明顯就是a*(*p),因為取地址運算子的優先順序別比算術運算子乘要高
(走盡天涯路) 20:08:41
那本書上說的例子是在 優先機相同情況下 運算順序的問題 
當然不同時 運算順序 和結合性 與 優先順序 有密切關係
(學C新手) 20:14:39
Ricky講講結合性吧?我整個的概念被顛覆了
(分別說下一元和二元)
Ricky) 20:15:37
結合性本來是個很簡單的東西,你自己把它想得太複雜了,想想看算術中是怎麼計算運算式的。
(天堂沒有雪) 20:18:24
你遇到過:a+b*c這樣算嗎(a+b)*c就按我們小學數學裡的算就行了,幹嗎搞那麼複雜,有些東西是跟你用的環境有關的

(Ricky) 20:19:24
除了單目運算子、條件運算子、賦值運算子以外,其他都是從左至右的。a+b-c,就是先加後減,定義int **p,那麼**p = 5;就是*(*p) = 5,先取p指向的那個int指標,然後取該指標的內容,因為*是單目運算子,是先右後左的

(學C新手) 20:22:05
所謂結合性應該就是把運算子和運算對象結合起來?
(Ricky) 20:23:42
這裡有一個"*",你知道它是乘法還是取內容嗎?都要放到具體環境裡面的,一開始寫代碼,吃不準就老老實實添加括弧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.