C語言函數(shù)指針-創(chuàng)新互聯(lián)

  • 函數(shù)指針
    • 代碼示例
  • 函數(shù)指針數(shù)組
    • 示例:計(jì)算器
  • 指向函數(shù)指針數(shù)組的指針

成都創(chuàng)新互聯(lián)公司長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為巴青企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),巴青網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。函數(shù)指針
//數(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://muchs.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)

外貿(mào)網(wǎng)站制作