函数指针,函数指针数组,函数指针数组指针实例

一、函数指针实例

  函数指针实例1:

#include<stdio.h>
void fun0(void)
{
	printf("call fun0\n");
}
void fun1(void)
{
	printf("call fun1\n");
}

void main(void)
{
	void(*pf0)(void); //定义函数指针变量
	void(*pf1)(void);

	pf0 = fun0;      //函数指针变量赋值(方式1)
	pf1 = &fun1;     //函数指针变量赋值(方式2)

	pf0();	    //通过函数指针调用函数(方式1)
	(*pf0)();	//通过函数指针调用函数(方式2)

	pf1();
	(*pf1)();

	getchar();
}

  函数指针实例2:

double my_add(double a, double b)
{
	return a + b;
}

double my_sub(double a, double b)
{
	return a - b;
}

double calculate(double a, double b, double(*funcptr)(double, double))
{
	return (*funcptr)(a, b);
}


void main(void)
{
	double a = 4.0, b = 3.0, c, d;

	c = calculate(a, b, my_add);  //函数指针作为函数参数
	d = calculate(a, b, my_sub);
}

  函数指针实例3:

#include <stdio.h>
typedef double(*FP_CALC)(double, double);//定义一个函数指针类型

double my_add(double a, double b)
{
	return a + b;
}

double my_sub(double a, double b)
{
	return a - b;
}

double my_mul(double a, double b)
{
	return a * b;
}

double my_div(double a, double b)
{
	return a / b;
}

FP_CALC mapping_operator(char operator)
{
	FP_CALC fp;
	switch (operator)
	{
		case '+':
			fp = my_add;
			break;
		case '-':
			fp = my_sub;
			break;
		case '*':
			fp = my_mul;
			break;
		case '/':
			fp = my_div;
			break;
		default:
			fp = NULL;
			break;
	}
	return fp;
}

double calculate(double a, double b, char operator)
{
	FP_CALC fp = mapping_operator(operator);
	return (*fp) (a, b);
}

void main(void)
{
	double a = 20.0, b = 10.0;

	printf("%f %c %f = %f\n", a, '+', b, calculate(a, b, '+'));
	printf("%f %c %f = %f\n", a, '-', b, calculate(a, b, '-'));
	printf("%f %c %f = %f\n", a, '*', b, calculate(a, b, '*'));
	printf("%f %c %f = %f\n", a, '/', b, calculate(a, b, '/'));
	getchar();
}

二、函数指针数组实例

  函数指针数组实例1:

#include <stdio.h>

char *fun0(char *p)
{
	printf("%s\n", p);
	return p;
}

char *fun1(char *p)
{
	printf("%s\n", p);
	return p;
}

char *fun2(char *p)
{
	printf("%s\n", p);
	return p;
}

void main(void)
{
	char * (*pf[3]) (char *) = { NULL, NULL, NULL }; // 定义函数指针数组

	pf[0] = fun0;  //函数指针数组元素赋值
	pf[1] = &fun1; //另一种赋值方式
	pf[2] = &fun2;

	(*pf[0])("fun0");  //调用函数
	(*pf[1])("fun1");
	pf[2]("fun2");    //另一种方式调用函数

	getchar();
}

  函数指针数组实例2:

#include <stdio.h>
typedef double(*FP_CALC)(double, double);//定义一个函数指针类型

double my_add(double a, double b)
{
	return a + b;
}

double my_sub(double a, double b)
{
	return a - b;
}

double my_mul(double a, double b)
{
	return a * b;
}

double my_div(double a, double b)
{
	return a / b;
}

void main(void)
{
	double a = 20.0, b = 10.0;

	FP_CALC functionPointerArray[4] = { my_add , my_sub , my_mul , my_div };

	printf("%f %c %f = %f\n", a, '+', b, functionPointerArray[0](a, b));
	printf("%f %c %f = %f\n", a, '-', b, functionPointerArray[1](a, b));
	printf("%f %c %f = %f\n", a, '*', b, functionPointerArray[2](a, b));
	printf("%f %c %f = %f\n", a, '/', b, functionPointerArray[3](a, b));
	getchar();
}

三、函数指针数组指针实例

#include <stdio.h>

char *fun0(char *p)
{
	printf("%s\n", p);
	return p;
}

char *fun1(char *p)
{
	printf("%s\n", p);
	return p;
}

char *fun2(char *p)
{
	printf("%s\n", p);
	return p;
}

void main(void)
{
	char * (*a[3]) (char *) = { NULL, NULL, NULL }; // 定义函数指针数组
	char * (*(*pf)[3]) (char *) = NULL; // 定义函数指针数组指针

	pf = &a;

	a[0] = fun0;  //函数指针数组元素赋值
	a[1] = &fun1; //另一种赋值方式
	a[2] = &fun2;

	(*pf[0][0])("fun0");  //调用函数
	(*pf[0][1])("fun1");
	pf[0][2]("fun2");    //另一种方式调用函数

	getchar();
}
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值