//數(shù)組指針
int arr[10];
int(*p)[10] = &arr;
//函數(shù)指針
int Add(int x, int y);
int(*pf)(int, int) = &Add;
//int(*pf)(int, int) = Add;//該代碼與上面的代碼意義相同,即函數(shù)名就可以代表函數(shù)的地址
代碼示例( *( void (*)() ) 0 )();
0先與 (void(* )()) 結(jié)合,也就是說0先被強(qiáng)制類型轉(zhuǎn)換為 void(* )() 的函數(shù)指針,然后又被解引用(* (void(* )())0) 就相當(dāng)于使用在0地址處的類型為void(*)()的一個(gè)函數(shù),而后面的那個(gè)括號(hào)本來就沒有參數(shù)。
void (*signal(int, void(*)(int)))(int);
signal是變量名,signal先與后面的括號(hào)結(jié)合,表明signal是一個(gè)函數(shù),括號(hào)內(nèi)的內(nèi)容表明該函數(shù)第一個(gè)參數(shù)的參數(shù)類型是int,第二個(gè)參數(shù)的參數(shù)類型是void(* )(int),該代碼去掉signal(int, void(* )(int)),剩下的內(nèi)容是void(*)(int),這部分內(nèi)容是signal函數(shù)的返回類型。
//typedef unusigned int u_int
typedef void(*pf)(int);
pf signal(int, pf);
使用typedef將void(*)(int) 重定義為pf, 然后再用pf表示signal函數(shù)更加容易理解(注意重命名時(shí)的書寫)
函數(shù)指針數(shù)組存放函數(shù)指針的數(shù)組就是函數(shù)指針數(shù)組
//指針
int* p = NULL;
//指針數(shù)組
int* arr[5];
//函數(shù)指針
int(*pf)(int, int);
//函數(shù)指針數(shù)組
int(*pf[5])(int, int);
int(* pf[5])(int, int)中pf先與[]結(jié)合表明pf是一個(gè)數(shù)組,去掉pf[5]后的內(nèi)容是該數(shù)組中的元素類型int(* )(int, int),也就是說該數(shù)組中存放的有5個(gè)類型為int(* )(int, int)的函數(shù)指針。
示例:計(jì)算器#includevoid menu();
int Add(int, int);
int Sub(int, int);
int Mul(int, int);
int Div(int, int);
int main()
{int x = 0;
int y = 0;
int ret = 0;
int input = 0;
int(*pf[5])(int, int) = {NULL, Add, Sub, Mul, Div};
do
{menu();
scanf("%d", &input);
if (input<= 4 && input >= 1)
{ printf("Enter two numbers: ");
scanf("%d%d", &x, &y);
ret = pf[input](x, y);
printf("%d\n", ret);
}
else if (0 == input)
{ printf("退出程序\n");
}
else
{ printf("輸入錯(cuò)誤\n");
}
} while (input);
return 0;
}
int Add(int a, int b)
{return a + b;
}
int Sub(int a, int b)
{return a - b;
}
int Mul(int a, int b)
{return a * b;
}
int Div(int a, int b)
{return a / b;
}
void menu()
{printf("\n1.add 2.sub\n");
printf("\n3.mul 4.div\n");
printf("\n 0.exit\n");
}
該程序中的函數(shù)指針數(shù)組將調(diào)用的函數(shù)都存放到一個(gè)數(shù)組中,在使用的時(shí)候可以直接使用不同的下標(biāo)來訪問不同的函數(shù)。
指向函數(shù)指針數(shù)組的指針指向函數(shù)指針數(shù)組的指針是一個(gè)指針,它指向了一個(gè)數(shù)組,該數(shù)組是函數(shù)指針數(shù)組。
//函數(shù)指針
int(*p)(int, int);
//函數(shù)指針數(shù)組
int(*pf[5])(int, int);
//指向函數(shù)指針數(shù)組的指針
int(*(*pff)[5])(int, int);
pff 先與 * 結(jié)合,表明 pff 是一個(gè)指針,去掉 ( * pff ) 之后,剩下的就是 pff 指向的類型,也就是 int( * [5])(int, int)。因?yàn)?pff 可以理解為對(duì)函數(shù)指針數(shù)組取地址,也就是 pff = &pf, * pff也就應(yīng)該等價(jià)于 pf ,所以可以直接在函數(shù)指針數(shù)組 pf 的基礎(chǔ)上得到指向函數(shù)指針數(shù)組的指針,也就是將 pf 直接改為 * pff ,再在 * pff 的外面加上括號(hào)。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文題目:C語言函數(shù)指針-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://vcdvsql.cn/article34/ddhhse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、建站公司、電子商務(wù)、網(wǎng)站策劃、網(wǎng)站收錄、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容