C語言typedef與復(fù)雜函數(shù)聲明問題的深入解析
下面是三個變量的聲明,我想使用typedef分別給它們定義一個別名,請問該如何做?
>1:int *(*a[5])(int, char*);
>2:void (*b[10]) (void (*)());
>3. doube(*)() (*pa)[9];
答案與分析:
對復(fù)雜變量建立一個類型別名的方法很簡單,你只要在傳統(tǒng)的變量聲明表達(dá)式里用類型名替代變量名,然后把關(guān)鍵字typedef加在該語句的開頭就行了。
>1:int *(*a[5])(int, char*);
//pFun是我們建的一個類型別名
typedef int *(*pFun)(int, char*);
//使用定義的新類型來聲明對象,等價于int* (*a[5])(int, char*);
pFun a[5];
a是一個包含5個元素的數(shù)組,數(shù)組的元素是函數(shù)指針,該函數(shù)指針?biāo)负瘮?shù)的的返回值是指向int類型的指針,輸入?yún)?shù)有兩個,第一個是int,第二個是char*
>2:void (*b[10]) (void (*)());
//首先為上面表達(dá)式紅色部分聲明一個新類型
typedef void (*pFunParam)();
//整體聲明一個新類型
typedef void (*pFun)(pFunParam);
//使用定義的新類型來聲明對象,等價于void (*b[10]) (void (*)());
pFun b[10];
b是一個含有10個元素的數(shù)組,每個元素都是一個函數(shù)指針,該函數(shù)指針?biāo)傅暮瘮?shù)的返回值為void,輸入?yún)?shù)為另一個函數(shù)指針,這個函數(shù)指針沒有輸入?yún)?shù),返回值為void
>3. doube(*)() (*pa)[9];
//首先為上面表達(dá)式紅色部分聲明一個新類型
typedef double(*pFun)();
//整體聲明一個新類型
typedef pFun (*pFunParam)[9];
//使用定義的新類型來聲明對象,等價于doube(*)() (*pa)[9];
pFunParam pa;
pa是個指針,指針指向一個含有9個元素的數(shù)組,數(shù)組的元素是一個函數(shù)指針,函數(shù)指針?biāo)负瘮?shù)沒有輸入?yún)?shù),返回值為double
相關(guān)文章
C++求所有頂點(diǎn)之間的最短路徑(用Dijkstra算法)
這篇文章主要為大家詳細(xì)介紹了C++用Dijkstra算法求所有頂點(diǎn)之間的最短路徑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04C語言題解Leetcode56合并區(qū)間實(shí)例
這篇文章主要為大家介紹了C語言題解Leetcode56合并區(qū)間實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01詳解C++ 動態(tài)庫導(dǎo)出函數(shù)名亂碼及解決
這篇文章主要介紹了C++ 動態(tài)庫導(dǎo)出函數(shù)名亂碼及解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03vs2017智能感知錯誤解決代碼標(biāo)紅但編譯通過問題
這篇文章主要介紹了vs2017智能感知錯誤代碼標(biāo)紅但編譯通過問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08