Re: [問題] (int *)*p[100] 的意思?
※ 引述《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
07/29 15:17, 2F
推
07/29 21:40, , 3F
07/29 21:40, 3F
推
07/30 14:06, , 4F
07/30 14:06, 4F
推
07/30 17:25, , 5F
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
08/02 13:43, 8F
推
08/02 17:23, , 9F
08/02 17:23, 9F
推
08/12 01:57, , 10F
08/12 01:57, 10F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):