最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年09月02日 14:54:04   作者:AKA你的閨蜜  
這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關(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ù)指針,故元素類型為函數(shù)指針類型。

函數(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;
}

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

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

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

轉(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)不同選擇情況下,通過函數(shù)地址“跳轉(zhuǎn)”到不同的函數(shù)的功能。

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

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

若不想舍棄switch語句,還可以這樣簡(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;
}

如下圖所示,被通過函數(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)和指針名,就是指向的變量類型;去掉指針名就是指針的類型。

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

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

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

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

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

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

在這里插入圖片描述

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

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

總結(jié)

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

相關(guān)文章

  • C++設(shè)計(jì)模式之單例模式詳解

    C++設(shè)計(jì)模式之單例模式詳解

    這篇文章主要介紹了C++設(shè)計(jì)模式之單例模式,本文同時(shí)給出了數(shù)種單例模式的實(shí)現(xiàn)代碼,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 解析在WTL下使用雙緩沖的實(shí)現(xiàn)方法

    解析在WTL下使用雙緩沖的實(shí)現(xiàn)方法

    本篇文章是對(duì)在WTL下使用雙緩沖的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言結(jié)構(gòu)體嵌套與對(duì)齊超詳細(xì)講解

    C語言結(jié)構(gòu)體嵌套與對(duì)齊超詳細(xì)講解

    這篇文章主要介紹了C語言結(jié)構(gòu)體嵌套與對(duì)齊,C語言中結(jié)構(gòu)體是一種構(gòu)造類型,和數(shù)組、基本數(shù)據(jù)類型一樣,可以定義指向該種類型的指針。結(jié)構(gòu)體指針的定義類似其他基本數(shù)據(jù)類型的定義
    2022-12-12
  • 用C語言實(shí)現(xiàn)掃雷小游戲

    用C語言實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了用C語言實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 淺談C++如何求等差素?cái)?shù)列

    淺談C++如何求等差素?cái)?shù)列

    這篇文章主要介紹了淺談C++如何求等差素?cái)?shù)列,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Qt實(shí)現(xiàn)UDP通信的示例代碼

    Qt實(shí)現(xiàn)UDP通信的示例代碼

    UDP是一個(gè)輕量級(jí)、不可靠、面向數(shù)據(jù)報(bào)的、無連接的傳輸層協(xié)議,多用于可靠性要求不嚴(yán)格,不是非常重要的傳輸,如直播、視頻會(huì)議等等。本文將通過Qt實(shí)現(xiàn)UDP通信,感興趣的可以了解一下
    2022-11-11
  • C++中std::transform的使用小結(jié)

    C++中std::transform的使用小結(jié)

    std::transform?是 C++ 標(biāo)準(zhǔn)庫中的一個(gè)算法,本文主要介紹了C++中std::transform的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • C++11中使用using的方法

    C++11中使用using的方法

    在 C++ 中 using 用于聲明命名空間,使用命名空間也可以防止命名沖突。這篇文章主要介紹了C++11中使用using的方法,需要的朋友可以參考下
    2021-09-09
  • C++ COM編程之什么是組件?

    C++ COM編程之什么是組件?

    這篇文章主要介紹了COM編程之什么是組件?COM組件是以Win32動(dòng)態(tài)鏈接庫(DLLs)或可執(zhí)行文件(EXEs)的形式發(fā)布的可執(zhí)行代碼,需要的朋友可以參考下
    2014-10-10
  • c++顯式類型轉(zhuǎn)換示例詳解

    c++顯式類型轉(zhuǎn)換示例詳解

    這篇文章主要介紹了c++顯式類型轉(zhuǎn)換示例詳解,需要的朋友可以參考下
    2014-04-04

最新評(píng)論

余江县| 威海市| 宁津县| 曲麻莱县| 二手房| 林芝县| 蓝田县| 顺平县| 东源县| 义马市| 敦化市| 浪卡子县| 贵定县| 安图县| 策勒县| 闽侯县| 绵阳市| 秭归县| 鹤峰县| 观塘区| 鄢陵县| 榕江县| 隆尧县| 长治市| 舞阳县| 开封市| 南郑县| 海晏县| 元江| 若羌县| 克什克腾旗| 枣阳市| 醴陵市| 泸西县| 紫金县| 马尔康县| 宁明县| 许昌县| 普安县| 察雅县| 海阳市|