使用者:走盡天涯路)
==================================================
訊息組:群/校友錄()
==================================================
訊息類型:聊天記錄
==================================================
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
這裡有一個"*",你知道它是乘法還是取內容嗎?都要放到具體環境裡面的,一開始寫代碼,吃不準就老老實實添加括弧