Re: [問題] (int *)*p[100] 的意思?

看板C_and_CPP作者 (CJ Cat)時間11年前 (2012/07/29 14:50), 編輯推噓9(901)
留言10則, 10人參與, 最新討論串2/2 (看更多)
※ 引述《Eclair0313 (巧克力泡芙)》之銘言: : (int *)*p[100]; : 這個中文是啥意思QoQ 剛好上學期學校有教到complex type declaration,來獻醜一下 要將一個複雜的宣告型別翻譯成英文 遵守的是所謂的 "Right-Left Rule" 也就是從symbole name開始 先往右邊"由左而右"翻譯,然後再往左邊"由右而左"翻譯 遇到括弧的時候則以括弧的順序為準 例如 AA (BB CC foo DD EE) FF symbol name 是 "foo" 然後往右邊翻譯,順序為 DD EE 接下來遇到括弧,所以往foo左邊翻譯,為 CC BB 括弧內翻譯完了,再往右翻譯,為 FF 最後往整個括弧的左邊翻譯,為AA 所以翻譯解讀順序為 foo is "DD EE CC BB FF AA" 接下來看各種特殊符號代表的意義: [x] 解讀為 an array of x ... (x, y) 解讀為 a function that takes x, and y, and returns ... * 解讀為 pointer to... 那這樣 (int *)*p[100] 代表的英文就很好翻譯了 由 p 開始出發,解讀順序是 [100] * * int 所以英文是 p is an array of 100 pointers to pointer to int 一開始的括弧基本上是不需要的 括弧只有在包含住symbol name的時候才有存在的必要 Right-Left Rule也可以應用在單元運算子上面 因為單元運算子的operator precedence就是依照此規則設計的 像是 -p++ 依照Right-Left Rule來看 post-increment先執行 然後是negate 還有 !(++p)++ 是pre-increment先執行 然後是post-increment 最後是logical negate 這也可以說明為什麼 ++p++ 不合法 因為post-increment先執行 結果為r-value,不可以再進行pre-increment 以上 :) -- Blog http://blog.cjcat.net Gallery http://cjcat2266.deviantart.com ptt2 Board CJWorkshop -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.59.37 ※ 編輯: cjcat2266 來自: 1.162.59.37 (07/29 14:52)

07/29 15:16, , 1F
非常感謝高手細心回答!!
07/29 15:16, 1F

07/29 15:17, , 2F
GOOD!
07/29 15:17, 2F

07/29 21:40, , 3F
可以m了
07/29 21:40, 3F

07/30 14:06, , 4F
-p++那邊不太懂
07/30 14:06, 4F

07/30 17:25, , 5F
厲害!寫的清晰易懂! 另外也推這篇http://ppt.cc/6KJ7
07/30 17:25, 5F

07/30 22:57, , 6F
推!
07/30 22:57, 6F

07/31 11:04, , 7F
推!!!!!
07/31 11:04, 7F

08/02 13:43, , 8F
PUSH
08/02 13:43, 8F

08/02 17:23, , 9F
Expert C Programming這本書講得很清楚
08/02 17:23, 9F

08/12 01:57, , 10F
推 expert C prgramming
08/12 01:57, 10F
文章代碼(AID): #1G5DqWPJ (C_and_CPP)
文章代碼(AID): #1G5DqWPJ (C_and_CPP)