C++基础知识 - 函数指针

C++基础知识 - 函数指针,第1张

C++基础知识 - 函数指针 指向函数的指针

#include 
#include 

using namespace std;

int compare_int(const void* a, const void* b) {
	int* a1 = (int*)a;
	int* b1 = (int*)b;

	return *a1 - *b1;
}

int compare_char(const void* a, const void* b) {
	char a1 = *(char*)a;
	char b1 = *(char*)b;

	if (a1 >= 'A' && a1 <= 'Z')	a1 += 32;
	if (b1 >= 'A' && b1 <= 'Z')	b1 += 32;

	return a1 - b1;
}


int main(void) {
	int x = 20;
	int y = 10;

	//定义一个指向函数的指针,就是把函数声明移过来
	//把函数名改成(*函数指针名), 其他都不变(形参名可以省略!)
	int (*fp)(const void*, const void*);

	//把函数的地址赋值给函数指针
	fp = &compare_int;

	//贝尔实验室的C和UNIX的开发者采用第1种形式,
	//而伯克利的UNIX推广者却采用第2 种形式ANSI C 兼容了两种方式

	//方式一, 按普通指针解引的放式进行调用
	//(*fp)(&x, &y);		//相当于调用 compare_int(&x, &y);

	//方式二, 直接调用
	//fp(&x, &y);

	//对arr整形数组进行快速排序, 调用qsort函数
	int arr[] = { 2, 10, 30, 1, 11, 8, 7, 111, 520 };
	int len = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, len, sizeof(arr[0]), (*fp));

	for (int i = 0; i < len; i++) {
		cout << arr[i] << " ";
	}

	cout << endl;


	//对arrc字符数组进行快速排序, 调用qsort函数
	char arrc[] = { "abcdefghiABCDEFGHI" };
	int len1 = (sizeof(arrc)-1) / sizeof(arrc[0]);
	int (*cp)(const void*, const void*);

	cp = &compare_char;
	qsort(arrc, len1, sizeof(arrc[0]), cp);

	for (int i = 0; i < len1; i++) {
		cout << arrc[i] << " ";
	}
	cout << endl;

	system("pause");
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存