int *(*a[5])(int, char*); 这句C++语句怎么理解?
ringa_lee
ringa_lee 2017-04-17 13:55:19
0
4
542
ringa_lee
ringa_lee

ringa_lee

全部回覆(4)
Ty80

你的理解有誤

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 *

小葫芦

對於這種問題,採取逐步分解的做法
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個元素,每個元素都是一個函數指標。

伊谢尔伦

a是一個數組,包含5個元素,每個元素都是一個指針,指針指向函數,函數接收int,char*兩個參數並且回傳int*。簡單來講,a就是一個函數指標數組

刘奇

int* (*a[5])(int,char*);

int* (*F)(int, char*)是定義函數指標型別F, 此函式帶來兩個參數(int, char*), 傳回int*;
F a[5]是定義長度為5的數組a,其元素為型別F;

所以其實是定義了陣列a, 長度為5,成員型別為函數指標.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板