以下是對C語言中的typedef與複雜函式宣告問題進行了詳細的分析介紹,需要的朋友可以過來參考下
下面是三個變數的聲明,我想使用typedef分別給它們定義一個別名,請問該如何做?
>1:int *(*a[5])(int, char*);
>2:void (*b[10]) (void (*)());
>3. doube(*)() (*pa)[9];
答案與分析:
對複雜變數建立一個類型別名的方法很簡單,你只要在傳統的變數聲明運算式裡用類型名替代變數名,然後把關鍵字typedef加在該語句的開頭就行了。
>1:int *(*a[5])(int, char*);
//pFun是我們建的一個類型別名
typedef int *(*pFun)(int, char*);
//使用定義的新類型來聲明對象,等價於int* (*a[5])(int, char*);
pFun a[5];
a是一個包含5個元素的數組,數組的元素是函數指標,該函數指標所指函數的的傳回值是指向int類型的指標,輸入參數有兩個,第一個是int,第二個是char*
>2:void (*b[10]) (void (*)());
//首先為上面運算式紅色部分聲明一個新類型
typedef void (*pFunParam)();
//整體聲明一個新類型
typedef void (*pFun)(pFunParam);
//使用定義的新類型來聲明對象,等價於void (*b[10]) (void (*)());
pFun b[10];
b是一個含有10個元素的數組,每個元素都是一個函數指標,該函數指標所指的函數的傳回值為void,輸入參數為另一個函數指標,這個函數指標沒有輸入參數,傳回值為void
>3. doube(*)() (*pa)[9];
//首先為上面運算式紅色部分聲明一個新類型
typedef double(*pFun)();
//整體聲明一個新類型
typedef pFun (*pFunParam)[9];
//使用定義的新類型來聲明對象,等價於doube(*)() (*pa)[9];
pFunParam pa;
pa是個指標,指標指向一個含有9個元素的數組,數組的元素是一個函數指標,函數指標所指函數沒有輸入參數,傳回值為double