typedef char *pc; /* pc is pointer to char */
typedef pc fpc(); /* fpc is function returning pointer to char */
好爲止。請注意,最後的typedef也可以寫爲
typedef char *fpc();
接着,
typedef fpc *pfpc;
聲明pfpc
作爲指針以fpc
。因爲我們知道,fpc
是返回一個指針char
功能,然後pfpc
必須是一個指針,返回指針char
功能,或
typedef char *(*pfpc)()
接下來我們
typedef pfpc fpfpc();
這一次,fpfpc
是返回pfpc
的函數。因爲我們知道,pfpc
是一個指向返回指針char
功能,fpfpc
必須返回一個指針返回指針char
功能的功能,或
typedef char *(*fpfpc())();
接下來,我們
typedef fpfpc *pfpfpc;
,它聲明pfpfpc
作爲指向fpfpc
的指針。因爲我們知道fpfpc
是返回一個指針返回指針char
功能的功能,pfpfpc必須是一個指向返回一個指向函數的指針返回char
功能,或
typedef char *(*(*pfpfpc)())();
最後,我們有的pfpfpc
pfpfpc a[N];
一個的N個元素的數組既然我們知道pfpfpc
是指向返回指針返回指針char
功能的功能,則a
必須點的N元件陣列ERS在返回指針返回指針的函數來char
功能:
char *(*(*a[N])())();
主要規則要記住讀寫毛茸茸的聲明是[]
和()
具有更高的優先級比*
,所以
*a[] -- is an array of pointer
(*a)[] -- is a pointer to an array
*f() -- is a function returning a pointer
(*f)() -- is a pointer to a function
和整個事情被細分爲
a -- a
a[N] -- is an N-element array
*a[N] -- of pointers
(*a[N])() -- to functions
*(*a[N])() -- returning pointer
(*(*a[N])())() -- to function
*(*(*a[N])())() -- returning pointer
char *(*(*a[N])())() -- to char
去的其他方式,我們有
pfpfpc -- is a synonym for
* fpfpc -- is a synonym for
* pfpc() -- is a synonym for
*(* fpc)() -- is a synonym for
*(*pc())() -- is a synonym for
char *(*(*)())()
最後一步不是非常直觀,我承認。
這可能是一個模糊比賽的好候選人。 – Mysticial 2012-02-01 10:09:10
'a'是一個指向函數指針的指針數組,返回一個指向函數指針的指針,返回一個指向'char'的指針。我覺得我應該睡一會兒,然後纔會對此失去信心...... – Mysticial 2012-02-01 10:29:22
複製粘貼來自http://c-faq.com/decl/cdecl1.html,downvote。 – Bort 2012-02-01 13:02:14