PHP中文网2017-04-17 13:57:19
你的理解有誤
int * (*a[5])(int , char * )
a 是一个长度为5的数组, 数组的每个元素是一个函数指针
函数指针的类型
返回值 是 int * , 带两个参数 int , char *
對於函數指標
B (*A)(int , char * )
括号外的是函数部分, 括号内的是指针部分
對於變數
int *(*a[5]) 其实等同于 int **a[5];
a 是 長度為5的數組,數組每個元素是int**
*運算子的結合順序是從右到左,第二個*要比第一個*先結合,所以要不要括號無所謂
至於表達 指向「長度為5的指標數組」的指標(也就是二維陣列中列長度為5的行首指標)?
先想想 指向 {長度為5的陣列} 的指標怎麼表示
int (*a)[5];// 此时的括号才有意义,没括号,[] 优于 * 结合
a 是指向數組 ,數組的每個元素 是 int
int* (*a)[5];
a 是指向數組 ,數組的每個元素 是 int *
高洛峰2017-04-17 13:57:19
對於這種問題,採取逐步分解的做法int* (*a[5])(int,char*)
可以看做是int* F(int,char*)
,其中F
等價於(*a[5])
這裡F
就是一個回傳值型別為int*
,參數型別為(int,char*)
的函數。
也就是說*a[5]
為一個函數,因為運算子優先順序的原因,這裡可以寫作*(a[5])
。
那麼就是說a[5]
是一個函數指針,指向型別為int*()(int,char*)
的函數。
所以a
其實是一個數組,其有5個元素,每個元素都是一個函數指標。
伊谢尔伦2017-04-17 13:57:19
a
是一個數組,包含5個元素,每個元素都是一個指針,指針指向函數,函數接收int
,char*
兩個參數並且回傳int*
。簡單來講,a
就是一個函數指標數組
怪我咯2017-04-17 13:57:19
int* (*a[5])(int,char*);
int* (*F)(int, char*)是定義函數指標型別F, 此函式帶來兩個參數(int, char*), 傳回int*;
F a[5]是定義長度為5的數組a,其元素為型別F;
所以其實是定義了陣列a, 長度為5,成員型別為函數指標.