欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言進(jìn)階:指針的進(jìn)階(5)

 更新時(shí)間:2021年09月02日 14:54:04   作者:AKA你的閨蜜  
這篇文章主要介紹了C語(yǔ)言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價(jià)值。需要的朋友可以了解下

函數(shù)指針數(shù)組

//整型數(shù)組 - 存放整型變量
int arr[10];
//字符數(shù)組 - 存放字符變量
char ch[5];
//指針數(shù)組 - 存放指針變量
int* arr[10];
//函數(shù)指針數(shù)組 - 存放函數(shù)指針
int(*pfar[10])(int, int);

指針數(shù)組存放指針變量,函數(shù)指針數(shù)組存放函數(shù)指針,故元素類(lèi)型為函數(shù)指針類(lèi)型。

函數(shù)指針數(shù)組的定義

int Add(int x, int y) {//int(*)(int,int)
	return x + y;
}
int Sub(int x, int y) {//int(*)(int,int)
	return x - y;
}
int Mul(int x, int y) {//int(*)(int,int)
	return x * y;
}
int Div(int x, int y) {//int(*)(int,int)
	return x / y;
}
int main() {
	//函數(shù)指針數(shù)組 - pfArr
	int(*pfArr[4])(int, int) = { Add,Sub,Mul,Div };
	return 0;
}

類(lèi)型相同的函數(shù),存放在同一個(gè)函數(shù)指針數(shù)組中。一般功能相似的函數(shù),其類(lèi)型也相同。

函數(shù)指針數(shù)組的使用

利用函數(shù)指針數(shù)組實(shí)現(xiàn)計(jì)算器,以簡(jiǎn)化調(diào)用過(guò)程。

轉(zhuǎn)移表

//計(jì)算器實(shí)現(xiàn)1.0
void menu() {
	printf("**********************************\n");
	printf("*****  1.Add  ******  2.Sub  *****\n");
	printf("*****  3.Mul  ******  4.Div  *****\n");
	printf("************  0.exit  ************\n");
	printf("**********************************\n");
}
int main() {
	int (*pfArr[10]) (int, int) = { 0,Add,Sub,Mul,Div };//數(shù)組下標(biāo)和選項(xiàng)序號(hào)匹配
	int input = 0;
	int a = 0;
	int b = 0;
	do {
		menu();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input);
		if (0 <= input && input <= 4) {
			if (input == 0) {
				printf("退出游戲\n");
				break;
			}
			else {
				printf("請(qǐng)輸入操作數(shù)\n");
				scanf("%d %d", &a, &b);
				printf("ret == %d\n", pfArr[input](a, b));
				break;
			}
		}
		else {
			printf("輸入錯(cuò)誤\n");
			break;
		}
	} while (input);
	return 0;
}

函數(shù)指針數(shù)組實(shí)現(xiàn)不同選擇情況下,通過(guò)函數(shù)地址“跳轉(zhuǎn)”到不同的函數(shù)的功能。

這樣的函數(shù)指針數(shù)組成為轉(zhuǎn)移表。(跳轉(zhuǎn)功能)

回調(diào)函數(shù)

若不想舍棄switch語(yǔ)句,還可以這樣簡(jiǎn)化代碼3.0,代價(jià)為創(chuàng)建全局變量。若不想創(chuàng)建全局變量,可以使用2.0

/******
* 計(jì)算器實(shí)現(xiàn)
* 2.0
******/
void Calc(int (*pf)(int,int)) {
	int a = 0;
	int b = 0;
	printf("請(qǐng)輸入操作數(shù):>");
	scanf("%d %d", &a, &b);
	printf("%d\n", pf(a, b));
}
int main() {
	int input = 0;
	do {		menu();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input);
		switch (input) {
		case 0:
			printf("退出成功\n");
			break;
		case 1:
			Calc(Add);
			break;
		case 2:
			Calc(Sub);
			break;
		case 3:
			Calc(Mul);
			break;
		case 4:
			Calc(Div);
			break;
		default:
			printf("請(qǐng)重新選擇\n");
			break;
		}
	} while (input);
	return 0;
}
/******
* 計(jì)算器實(shí)現(xiàn)
* 3.0
******/
int (*pfArr[10])(int, int) = { 0,Add,Sub,Mul,Div };
int input = 0;
void Call() {
	int a = 0;
  int b = 0;
	printf("請(qǐng)輸入操作數(shù):>");
	scanf("%d %d", &a, &b);
	printf("%d\n", pfArr[input](a, b));
}
int main() {
	do {
		menu();
		printf("請(qǐng)選擇:>");
		scanf("%d", &input);
		switch (input) {
		case 0:
			printf("退出成功\n");
			break;
		case 1:
		case 2:
		case 3:
		case 4:
			Call();
			break;
		default:
			printf("請(qǐng)重新選擇\n");
			break;
		}
	} while (input);
	return 0;
}

如下圖所示,被通過(guò)函數(shù)指針調(diào)用的函數(shù)叫做回調(diào)函數(shù),回調(diào)函數(shù)即使第三方調(diào)用調(diào)用函數(shù)的參數(shù)也在其中被調(diào)用。

若想在調(diào)用函數(shù)中隨條件變化而調(diào)用不同的函數(shù),就必須使用回調(diào)函數(shù)的方法:調(diào)用函數(shù)中使用函數(shù)指針,指向不同函數(shù)?;卣{(diào)函數(shù)在大型工程中顯得非常方便。

在這里插入圖片描述

指向函數(shù)指針數(shù)組的指針

int arr[10];
int(*parr)[10] = &arr;//整型數(shù)組指針
char(*pch)[10] = &ch;//字符數(shù)組指針
//指向整型數(shù)組指針的指針
int(*(*pparr))[10] = &parr;
//指向字符數(shù)組指針的指針
char(*(*ppch))[10] = &pch;

//函數(shù)1.
int Add(int x, int y) {
	return x + y;
}
//函數(shù)指針2.
int (*pf)(int, int) = Add;
//函數(shù)指針數(shù)組3.
int (*pfArr[10])(int, int) = { Add };
//指向函數(shù)指針數(shù)組的指針4.
int(*(*ppfArr)[10])(int, int) = &pfArr;

前面已經(jīng)交代,指針去掉*號(hào)和指針名,就是指向的變量類(lèi)型;去掉指針名就是指針的類(lèi)型。

反過(guò)來(lái),定義數(shù)組指針,需要得到指針?biāo)赶虻臄?shù)組的類(lèi)型。1.先寫(xiě)出指針名,在其前面加*;2.寫(xiě)出數(shù)組的類(lèi)型int()[10]

定義指向函數(shù)指針數(shù)組的指針,依次寫(xiě)出如下內(nèi)容:

1.函數(shù) —— 得到函數(shù)類(lèi)型:int(int, int)

2.函數(shù)指針 —— 得到函數(shù)指針類(lèi)型:int(*)(int, int)

3.函數(shù)指針數(shù)組 —— 得到函數(shù)指針數(shù)組的類(lèi)型:int(*[10])(int, int)

4.指向函數(shù)指針數(shù)組的指針

在這里插入圖片描述

從后往前看,指向函數(shù)指針數(shù)組的指針去掉*和指針名就是函數(shù)指針數(shù)組的類(lèi)型,函數(shù)指針數(shù)組去掉*和指針名就是函數(shù)指針類(lèi)型,函數(shù)指針去掉*和指針名就是函數(shù)類(lèi)型。

在研究下去就沒(méi)有必要了,指針?lè)旁跀?shù)組里,數(shù)組被指針?biāo)赶颉?/p>

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)魔方比賽管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)魔方比賽管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)魔方比賽管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++作用域與函數(shù)重載的實(shí)現(xiàn)

    C++作用域與函數(shù)重載的實(shí)現(xiàn)

    本文主要介紹了C++作用域與函數(shù)重載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C++單一職責(zé)原則示例代碼淺析

    C++單一職責(zé)原則示例代碼淺析

    我們?cè)谠O(shè)計(jì)一個(gè)類(lèi)時(shí)要學(xué)會(huì)發(fā)現(xiàn)職責(zé),并把那些職責(zé)相互分離,其實(shí)要去判斷是否應(yīng)該分離出一個(gè)類(lèi)來(lái)并不難,前面說(shuō)過(guò),一個(gè)類(lèi)應(yīng)該只有一個(gè)引起它變化的原因,如果你能想到其它的原因也能去改變這個(gè)類(lèi),那么這個(gè)類(lèi)就具有多于1個(gè)的職責(zé),就應(yīng)該考慮類(lèi)的職責(zé)分離
    2023-02-02
  • C++詳解鏈棧的實(shí)現(xiàn)

    C++詳解鏈棧的實(shí)現(xiàn)

    今天我們學(xué)習(xí)的是鏈棧,也就是說(shuō)棧的鏈?zhǔn)浇Y(jié)構(gòu),我們運(yùn)用順序鏈的方式來(lái)實(shí)現(xiàn)。首先呢,鏈棧是不存在存儲(chǔ)空間滿(mǎn)的情況的,所以可以說(shuō)它是個(gè)無(wú)底洞,然而我們之前學(xué)的順序棧是有額定空間的
    2022-06-06
  • C++深度優(yōu)先搜索的實(shí)現(xiàn)方法

    C++深度優(yōu)先搜索的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++深度優(yōu)先搜索的實(shí)現(xiàn)方法,是數(shù)據(jù)結(jié)構(gòu)中非常重要的一種算法,需要的朋友可以參考下
    2014-08-08
  • C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼

    C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼

    這篇文章主要介紹了C++ 中實(shí)現(xiàn)把EXCEL的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)(ACCESS、MSSQL等)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語(yǔ)言魔塔游戲的實(shí)現(xiàn)代碼

    C語(yǔ)言魔塔游戲的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C語(yǔ)言魔塔游戲的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++之內(nèi)存泄漏排查詳解

    C++之內(nèi)存泄漏排查詳解

    這篇文章主要介紹了c++ 如何排查內(nèi)存泄漏,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決

    C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決

    這篇文章主要介紹了C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決,文中的題目是將元素連接起來(lái)排成一個(gè)數(shù)并要求出這類(lèi)結(jié)果中數(shù)最小的一個(gè),需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言學(xué)生管理系統(tǒng)源碼分享

    C語(yǔ)言學(xué)生管理系統(tǒng)源碼分享

    這篇文章主要為大家分享了C語(yǔ)言學(xué)生管理系統(tǒng)的源碼,幫助大家學(xué)習(xí)結(jié)構(gòu)體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評(píng)論