ringa_lee
你的理解有誤
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個元素,每個元素都是一個函數指標。
int* (*a[5])(int,char*)
int* F(int,char*)
F
(*a[5])
int*
(int,char*)
*a[5]
*(a[5])
a[5]
int*()(int,char*)
a
a是一個數組,包含5個元素,每個元素都是一個指針,指針指向函數,函數接收int,char*兩個參數並且回傳int*。簡單來講,a就是一個函數指標數組
int
char*
int* (*a[5])(int,char*);
int* (*F)(int, char*)是定義函數指標型別F, 此函式帶來兩個參數(int, char*), 傳回int*;F a[5]是定義長度為5的數組a,其元素為型別F;
所以其實是定義了陣列a, 長度為5,成員型別為函數指標.
你的理解有誤
對於函數指標
對於變數
a 是 長度為5的數組,數組每個元素是int**
*運算子的結合順序是從右到左,第二個*要比第一個*先結合,所以要不要括號無所謂
至於表達 指向「長度為5的指標數組」的指標(也就是二維陣列中列長度為5的行首指標)?
先想想 指向 {長度為5的陣列} 的指標怎麼表示
a 是指向數組 ,數組的每個元素 是 int
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,成員型別為函數指標.