函式指標陣列

2021-04-28 23:25:58 字數 1650 閱讀 3865

陣列型別:

int a[n]  -----------整型型別的陣列

int *a[n] -----------指標型別的陣列(指標陣列)

void (*fun[n])(void)---------函式型別的陣列(函式指標陣列)  //定義了n個函式指標元素的陣列 

在編寫d12的控制程式時,遇到了乙個陣列結構的函式指標,於是我們幾個人計論了大半天,最後終於搞懂它的奇妙所在。現將對它的理解敘述於下:

首先,我們要明白如何定義乙個函式指標陣列。大家只要學過c的應該都能看懂下面一語句:

void fun(void);

那麼由指標的定義可以得到下面乙個變化的語句:

void (*fun)(void);   //  " * "先跟函式結合,說明它是乙個指標,該指標指向函式fun,而且函式的輸入,輸出形參都是空。

我們知道乙個陣列的定義是這樣: uchar  aaa[n];   //含n個無符號字元形元素的陣列aaa

而乙個指標陣列是: uchar *aaa[n];  //陣列aaa中存放了n個批向無符號字元型的指標位址

於是我們就可以得出結論乙個函式指標陣列是這樣定義: void (*fun[n]) (void) ;

//定義了n個函式指標元素的陣列  而函式的輸入輸出形參都是空。

好。說了這麼多的題外話,接下說進入主題:

在usb的標準請求中,包含了11種標準請求,而且它們都是用乙個8位二進位制數表示。列表如下:

brequest                        value

get_status                          0

clear_feature                   1

reserved                             2

set_feature                        3

reserved                             4

set_address                       5

get_descriptor                  6

set_descriptor                   7

get_configuration             8

set_configuration             9

get_inte***ce                     10

set_inte***ce                     11

sysnch_frame                    12

而我們在編寫程式的時候要針對不同的請求呼叫不同的處理函式,我們可以用下面的方法來實現:

void request_fun(uchar brequest)

}而現在我們也可以簡單地用函式指標陣列來實現:

先定義如下陣列:

void (*request) (void)=

在程式中呼叫:

void ( *request[ brequest ] ) (void);

小結:當我們需要處理多個相類同的任務時,特別一任務比較多如:針對256個不同的情況進行不同的處理。就可以使用函式指標陣列來實現。這樣不單比使用switch語句簡結,而且可能執行速率也比較高。

指標陣列 陣列指標 函式指標 函式指標陣列

陣列指標 指向陣列的指標,是乙個指標,其指向的型別是陣列 指標陣列 元素為指標的陣列,是乙個陣列,其中的元素為指標。例如 int a 5 這個是陣列指標。int a 5 這個是指標陣列。定義函式指標型別 int max int,int typedef int fun ptr int,int 申明變數...

指標陣列,陣列指標,指標函式,函式指標

int p 4 指標陣列。是個有4個元素的陣列,每個元素的是指向整型的指標。int p 4 陣列指標。它是乙個指標,指向有4個整型元素的陣列。int func void 指標函式。無參函式,返回整型指標。int func void 表示函式指標,可以指向無參,且返回值為整型指標的函式。右左規則 因為...

陣列指標,指標陣列,函式指標,指標函式

陣列指標,指標陣列,函式指標,指標函式 指標 變數,存放變數的位址。例 int ptr,ptr是乙個指向整形變數的指標 陣列 例 int a 10 定義了乙個具有10個元素的一維陣列,其中陣列的每個元素是乙個int型別。陣列指標 陣列首元素位址的指標,即是指向陣列的指標。例 int ptr 10 c...