有幾點關於C語言的疑問

黑色月牙發表於2017-05-09

最近在讀李春葆教授的《新編C語言習題與解析》,遇到的問題還真是不少。在此求教!

1.這本書的24頁第20題和21題有些自相矛盾。 這裡有兩個表示式:d=9+e,e++,d+9;(來自20題) int num=7,sum=7;sum=num++,sum++,num++;(來自21題) 關鍵是,李老師在20題裡說這種表示式是錯的(沒說原因),而在21題卻說是可以這樣表達的。 不知道為什麼?

2.第10頁提示裡面,“變數宣告”寫成了“變理宣告”。應該是列印錯誤吧。

3.第27頁第40題。

設x,y,t均為int型變數,則執行語句x=y=3;t++x||++y;後,y的值是多少。

我是這樣想的:

邏輯或運算||這種雙目運算子的優先順序低於自加運算++這種單目運算子。所以先計算++x與++y,x與y都返回4,4與4進行或運算,返回真也就是1,所以y應該返回1。

但是李老師的答案是這樣的:

在語句t++x||++y;上,++x返回4不為假,故不會執行++y。結果是3.

我嘗試思考這個答案:

或許是前一個子式為真,由於是邏輯或運算,那麼就不用執行後一個子式了。但是反過來一想,後面整體還是一個邏輯式,總要返回0或1.就算或運算直接不執行,那麼3又是哪裡來的呢?子式++x應該是先加1後返回x,那麼t就真的不知是繼承誰的值了。

相關文章