回调函数:函数指针的使用(函数指针不同的定义调用、typedef的使用,万能指针void*的使用)

1.函数指针的两种定义方式及调用

#include <stdio.h>
int add(int a, int b)
{
	return a + b;
}

int main()
{
	int(*p)(int a, int b) = NULL;//定义函数指针
	int(*p1)(int, int) = NULL;//形参可以省略,定义函数指针
	p = add;//指向
	p1 = add;
	int sum = (*p)(3, 4);//调用
	int sum1 = p1(3, 4);//调用可以省略*,不过有些古老编译器不支持
	printf("sum = %d,sum1 = %d\n", sum,sum1);
	return 0;
	
}

回调函数:函数指针的使用(函数指针不同的定义调用、typedef的使用,万能指针void*的使用)

2.使用 函数指针实现回调函数

#include <stdio.h>
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
void print(int(*p)(int, int), int a, int b)
{
	printf("%d\n", p(a, b));
}

int main()
{
	print(add, 1, 2);
	print(sub, 4, 2);
	void(*p1)(int(*p)(int, int), int, int);//函数指针
	p1 = print;
	p1(add, 1, 2);
	p1(sub, 4, 2);
	(*p1)(add, 1, 2);
	(*p1)(sub, 4, 2);//复习上一步 都会打印出同样的数字 

	return 0;
	
}

回调函数:函数指针的使用(函数指针不同的定义调用、typedef的使用,万能指针void*的使用)

 3.利用typedef简化

#include <stdio.h>
typedef int(*func)(int, int);
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
//void print(int(*p)(int, int), int a, int b)
//{
//	printf("%d\n", p(a, b));
//}
void print(func p, int a, int b)
{
	printf("%d\n", p(a, b));
}

int main()
{
	print(add, 1, 2);
	print(sub, 4, 2);
	//void(*p1)(func , int, int);//函数指针,基于练习的目的 继续使用typedef
	typedef void(*func1)(func , int, int);
	func1 p1;
	p1 = print; 
	p1(add, 1, 2);
	p1(sub, 4, 2);
	(*p1)(add, 1, 2);
	(*p1)(sub, 4, 2);//复习上一步 都会打印出同样的数字 

	return 0;
	
}

回调函数:函数指针的使用(函数指针不同的定义调用、typedef的使用,万能指针void*的使用)

4 万能指针强转函数指针

#include <stdio.h>
typedef int(*func)(int, int);
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
//void print(int(*p)(int, int), int a, int b)
//{
//	printf("%d\n", p(a, b));
//}
void print(func p, int a, int b)
{
	printf("%d\n", p(a, b));
}

int main()
{
	//void(*p1)(func , int, int);//函数指针,基于练习的目的 继续使用typedef
	void *p = NULL;
	p = print;
	//万能指针需要强转后,再调用函数

	((void(*)(func p1, int, int))p)(add, 1, 2);
	((void(*)(func p1, int, int))p)(sub, 4, 2);
	(*(void(*)(func p1, int, int))p)(add, 1, 2);
	(*(void(*)(func p1, int, int))p)(sub, 4, 2);//感觉意义不是很大,只是当做练习使用


	return 0;
	
}

回调函数:函数指针的使用(函数指针不同的定义调用、typedef的使用,万能指针void*的使用)

 

上一篇:爬虫操作第三节-保存数据


下一篇:一个用来把一个工作簿按其中一个工作表关键词列拆分成多个工作簿的VBA代码