數組、指針與函數指針

指針數組

指針數組是一個數組,數組的每一個元素都是一個指針。

數組指針

數組指針,是一個指針,每個指針可以指向一個數組。而且在定義數組指針事,指針所指向的數組大小和類型已經確定。
int (*parr)[4]——該指針指向一個四個int型元素的數組
char (*pch)[5]——該指針指向一個五個char型元素的數組

函數指針

一個指向函數的指針,需指明所指向函數的參數類型。
void (*pfun)(int, void*)——指向一個參數類型爲int和void*、無返回值的函數。

使用方法

pfun(a, p);
(*pfun)(a, p);
(****pfun)(a, p);
都一樣,爲了方便,一般用第一種。

函數指針數組

一個數組,元素爲函數指針。在定義時確定函數指針所指向函數的參數和返回值類型。
void* (*pfarr[3])(char*, int)——pfarr是一個數組,三個函數指針元素,函數指針指向是參數類型爲char*和int、返回值爲char* 的函數。
pfarr[0] = fun;
char* pc = pfarr[0](pch, n);——調用數組內第一個函數指針所指向的函數。
pc = *(pfarr+1)(pch, n);——調用數組內第二個函數指針所指向的函數。

函數指針數組指針

它是一個指針,指向一個數組,數組內容爲指針,指針指向函數。
它是一個指針,指向一個數組,數組內容爲函數指針。
它是一個指針,指向一個函數指針數組。
它是一個函數指針數組指針……
明白了吧,就是從後往前看。

舉個栗子

void (*(*fuc)[4])(int, char*)
變量名爲fuc,它是一個void (*(*)[4])(int, char*)
fuc先與*結合,成爲指針,指向void (*[4])(int, char*)
然後(*fun)與[4]結合,成爲指向四個元素數組的數組指針,元素類型爲void (*)(int, char*),函數指針。
函數指針所指向的函數參數類型爲int和char*,無返回值。
總的來說,它是一個指向有四個函數指針元素數組的指針,函數參數爲int和char*,無返回值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章