真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

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

  • 函數指針
    • 代碼示例
  • 函數指針數組
    • 示例:計算器
  • 指向函數指針數組的指針

成都創(chuàng)新互聯(lián)公司長期為1000多家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為巴青企業(yè)提供專業(yè)的成都網站建設、網站建設,巴青網站改版等技術服務。擁有十余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。函數指針
//數組指針
int arr[10];
int(*p)[10] = &arr;
//函數指針
int Add(int x, int y);
int(*pf)(int, int) = &Add;
//int(*pf)(int, int) = Add;//該代碼與上面的代碼意義相同,即函數名就可以代表函數的地址
代碼示例
( *( void (*)() ) 0 )();

0先與 (void(* )()) 結合,也就是說0先被強制類型轉換為 void(* )() 的函數指針,然后又被解引用(* (void(* )())0) 就相當于使用在0地址處的類型為void(*)()的一個函數,而后面的那個括號本來就沒有參數。

void (*signal(int, void(*)(int)))(int);

signal是變量名,signal先與后面的括號結合,表明signal是一個函數,括號內的內容表明該函數第一個參數的參數類型是int,第二個參數的參數類型是void(* )(int),該代碼去掉signal(int, void(* )(int)),剩下的內容是void(*)(int),這部分內容是signal函數的返回類型。

//typedef unusigned int u_int
typedef void(*pf)(int);
pf signal(int, pf);

使用typedef將void(*)(int) 重定義為pf, 然后再用pf表示signal函數更加容易理解(注意重命名時的書寫)

函數指針數組

存放函數指針的數組就是函數指針數組

//指針
int* p = NULL;
//指針數組
int* arr[5];
//函數指針
int(*pf)(int, int);
//函數指針數組
int(*pf[5])(int, int);

int(* pf[5])(int, int)中pf先與[]結合表明pf是一個數組,去掉pf[5]后的內容是該數組中的元素類型int(* )(int, int),也就是說該數組中存放的有5個類型為int(* )(int, int)的函數指針。

示例:計算器
#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("輸入錯誤\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");
}

該程序中的函數指針數組將調用的函數都存放到一個數組中,在使用的時候可以直接使用不同的下標來訪問不同的函數。

指向函數指針數組的指針

指向函數指針數組的指針是一個指針,它指向了一個數組,該數組是函數指針數組。

//函數指針
int(*p)(int, int);
//函數指針數組
int(*pf[5])(int, int);
//指向函數指針數組的指針
int(*(*pff)[5])(int, int);

pff 先與 * 結合,表明 pff 是一個指針,去掉 ( * pff ) 之后,剩下的就是 pff 指向的類型,也就是 int( * [5])(int, int)。因為 pff 可以理解為對函數指針數組取地址,也就是 pff = &pf, * pff也就應該等價于 pf ,所以可以直接在函數指針數組 pf 的基礎上得到指向函數指針數組的指針,也就是將 pf 直接改為 * pff ,再在 * pff 的外面加上括號。

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧


當前題目:C語言函數指針-創(chuàng)新互聯(lián)
地址分享:http://weahome.cn/article/ddhhse.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部