一、函数指针
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;
}