陣列型別:
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...