int *(*const fun[])(int argc, char **argv)
const int *(* fun[])(int argc, char **argv).
是第一個常量函數指針返回整數指針的數組?
int *(*const fun[])(int argc, char **argv)
const int *(* fun[])(int argc, char **argv).
是第一個常量函數指針返回整數指針的數組?
第一個是隻讀的指針數組(即不能更改fun[i]
)到功能接收int
和char **
,並返回一個指針int
。
第二個是非常相似,除了你可以改變fun[i]
,但它指向的函數返回一個指向只讀整數的指針。
因此,簡而言之:
/* First declaration
int *(*const fun[])(int argc, char **argv)
*/
int arg1;
char **arg2;
int *example = (*fun[i])(arg1, arg2);
*example = 14; /* OK */
example = &arg1; /* OK */
fun[i] = anoter_function; /* INVALID - fun[] is an array of read-only pointers */
/* Second declaration
const int *(* fun[])(int argc, char **argv)
*/
const int *example2 = (*fun[i])(arg1, arg2);
fun[i] = another_function; /* OK */
*example2 = 14; /* INVALID - fun[i] returns pointer to read-only value. */
example2 = &arg1; /* OK */
應該將'example2'設爲'const'? – immibis
@immibis絕對。感謝您指出,我解決了它。 –
當你問'cdecl',那有什麼告訴你嗎? –
[cdecl](http://cdecl.org/)爲它們提供了'語法錯誤'。然而GCC不會抱怨...... – Kninnug
對於cdecl來解析它,你需要刪除參數名,即使它成爲「int *(* const fun [])(int,char **)」。 –