函数指针和函数指针数组

一、函数指针

1、定义:

       函数返回值类型      (*指针名)(函数参数列表)

eg:  int  (*pf)(int a)

注意:定义的函数指针的返回值类型要和函数返回值类型一致;函数指针中的函数参数列表要和定义的函数参数列表一致。

eg:  int  func(int a);  //定义一个函数

int (*pf)(int a);   //定义一个函数指针

pf =  func;  //初始化 

2、初始化:将函数名,也就是函数的首地址赋给指针变量即可。


3、实例:用函数指针计算公司不同职工工资水平

#include <iostream>
using namespace std;

void calsalary(double (*p)(void));
double reasearch(void);
double seller(void);
double service(void);

void main(void)
{
	int type;
	cout<<"请输入工作类型:"<<endl;
	cout<<"-------------------------------------"<<endl;
	cout<<"1、研发人员;2、销售人员;3、售后人员"<<endl;
	cout<<"-------------------------------------"<<endl;
	while(cin>>type && type != 0)
	{
		if(type == 1)
		{
			cout<<"研发人员"<<endl;
			calsalary(reasearch);
		}
		else if(type == 2)
		{
			cout<<"销售人员"<<endl;
			calsalary(seller);
		}
		else
		{
			cout<<"售后人员"<<endl;
			calsalary(seller);
		}
	}
}

void calsalary(double (*p)(void))
{
	double salary = (*p)();
	cout<<"工资是"<<salary<<endl;
}

double reasearch(void)
{
	short day;
	int salary_reasearch;
	cout<<"请输入工作天数:";
	cin>>day;
	salary_reasearch = day*500;
	return salary_reasearch;
}

double seller(void)
{
	short day;
	int salary_seller;
	cout<<"请输入工作天数:";
	cin>>day;
	salary_seller = day*100;
	return salary_seller;
}

double service(void)
{
	short day;
	int salary_service;
	cout<<"请输入工作天数:";
	cin>>day;
	salary_service = day*100;
	return salary_service;
}



二、函数指针数组

1、定义:当要指向的函数比较多的时候,可以采用定义函数指针数组来解决。此时,数组里面的元素是函数名。定义的格式:

                       函数指针的返回值类型     (*指针名【数组大小】)(函数参数列表)

2、函数指针数组的初始化:

与数组的初始化类似,只不过是将数组中的元素用函数名来进行进行初始化即可。其实就相当在数组中存放的是指针类型的变量,将函数名赋给每个变量,就相当于把函数的首地址赋给每个元素。


3、用函数指针数组来改写上面的程序,实现公司中不同职员工资的计算:

<pre name="code" class="cpp">#include <iostream>
using namespace std;

void calsalary(int type);
double reasearch(void);
double seller(void);
double service(void);

void main(void)
{
	int type;
	cout<<"请输入工作类型:"<<endl;
	cout<<"-------------------------------------"<<endl;
	cout<<"1、研发人员;2、销售人员;3、售后人员"<<endl;
	cout<<"-------------------------------------"<<endl;
	while(cin>>type && type != 0)
	{
		if(type == 1)
		{
			cout<<"研发人员工资是:"<<endl;      //此处也可以用switch
			calsalary(0);
		}
		else if(type == 2)
		{
			cout<<"销售人员工资是:"<<endl;
			calsalary(1);
		}
		else
		{
			cout<<"售后人员工资是:"<<endl;
			calsalary(2);
		}
	
	}
}

void calsalary(int kind)
{
	double (*pf[3])() = {reasearch,seller,service};  //定义函数指针数组
	double salary = pf[kind]();
	cout<<"工资是"<<salary<<endl;
}

double reasearch(void)
{
	short day;
	int salary_reasearch;
	cout<<"请输入工作天数:";
	cin>>day;
	salary_reasearch = day*500;
	return salary_reasearch;
}

double seller(void)
{
	short day;
	int salary_seller;
	cout<<"请输入工作天数:";
	cin>>day;
	salary_seller = day*100;
	return salary_seller;
}

double service(void)
{
	short day;
	int salary_service;
	cout<<"请输入工作天数:";
	cin>>day;
	salary_service = day*200;
	return salary_service;
}



 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路漫求索_CUMT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值