首頁>Program>source

此問题遵循關於C宣告的另一个問题.阅讀此問题的答案後,我了解了螺旋法則, 了解"宣告在使用後"的含義。

到目前為止.但是後来我讀了此宣告

char *(*(*a[N])())();

,我想知道如何使用"使用後的宣告""規則"来解析它.尤其是對於陣列部分。

我讀到的是:

(*(*a[N])())

是一个功能 () 归来 ,然後取消引用以下內容

char *

此函式是否返迴" (*a[N])() // 1" ",因此1是"指向返迴 char*的函式的指標" ' 然後我会說"当 char * 被稱為[先前的宣告]'.至此,我们有了 (*a[N]) 是一个函式,该函式返迴指向返迴 (*a[N])的函式的指標

但是我不知道如何應用此規則来區分"陣列指標"和"陣列指標".

有人可以澄清吗?

其他問题:在 char *之間,此類宣告中的"優先"規則是什麼 (在C ++中), &* ? [也许"優先"不是正確的術語]


要檢查我是否正確理解了"螺旋規則",我還在下面分析了此表達式; 請告诉我我是否錯。

[]

對我来說,它更容易(逐个迴圈):

+-----------+ | +------+ | | | +-+ | | | | ^ | | | char* (*(* a[N])())(); ^ ^ ^ ^ ^ ^ | | | | | | | | +---+ | | | +--------+ | +--------------+
  • 是N个陣列...
  • 指向函式返迴指標...
  • 指向函式返迴指標...
  • a

但是我可能会丢失一些东西,在這種情况下,我可以得到正確的答案,但是在另一个更複雜的情况下,這可能是錯誤的。

char *
最新回復
  • 5月前
    1 #

    您只需要逐步構建它即可。

    >
    char *X();  // X =~ (*(*a[N])())
    

    函式返迴 char*

    char *(*Y())();  // Y =~ (*a[N])
    

    函式返迴指向函式返迴 char*的指標

    在宣告中,就像在表達式中一樣(宣告遵循用法),後缀 [] 一元 *的優先順序更高 如此 相当於 *a[N] ,而不是 *(a[N])

    (*a)[N]
    

    指向函式返迴的指標指向函式返迴的指標 char *(*(*Z)())(); // Z =~ a[N]

    char*
    

    由N个指向函式的指標組成的陣列,這些指標返迴指向函式的指標,返迴 char *(*(*a[N])())();

    char*

  • c++:遞迴typedef函式定義:std :: function返迴自己的型別
  • delphi:如何在一處為多个應用程式定義應用程式版本?