此問題遵循this other question about C declarations。閱讀這個問題的答案,我讀了關於spiral rule,我也明白「申報遵循使用」是什麼意思。解析C和C++聲明的螺旋規則和'聲明遵循用法'
好吧。但後來我讀this declaration:
char *(*(*a[N])())();
,我想知道如何使用它解析「聲明如下用法」「規則」。特別是對於數組部分。
我讀的是:
(*(*a[N])())
是返回char *
,那麼,取消引用下面的
(*a[N])() // 1
是這個 '函數返回一個char*
' 功能()
,所以1是'指向函數返回char *
' 然後我會說'當調用(*a[N])
時,它是[先前的聲明]'。在這一點上,我們有(*a[N])
是一個函數返回指向返回char *
函數的指針。
但後來我不知道如何應用這個規則來區分'指針數組'和'指針數組'。
有人可以澄清這一點嗎?
其他問題:在這樣的聲明中,&
(C++中),*
和[]
之間有什麼規則的「優先級」? [也許「優先級」不是正確的術語]
要檢查是否我明白了「螺旋規則」正確地,我也解析低於這個表達式;請告訴我,如果我錯了。
+-----------+
| +------+ |
| | +-+ | |
| |^| | |
char* (*(* a[N])())();
^^^^^^
| | | | | |
| | +---+ | |
| +--------+ |
+--------------+
對我來說很容易(通過循環迴路):
a
是N的陣列...- 函數指針返回...
- 函數指針返回...
char *
但我可能錯過了一些在這種情況下讓我獲得正確答案的東西,但在另一個更復雜的情況下可能會出錯。
@Vality:如果你打算放棄C++標籤,你需要在C++中刪除'&'。 – 2015-12-31 22:36:38
@JonathanLeffler好點,通常我會說這需要分成兩個問題,但是我不願意這麼做。 – Vality 2016-01-01 02:21:10
@Vality這個問題突然得到如此關注? (我被通知了'好問題'徽章)。 – 2016-01-01 10:20:49