**
函数名作为函数参数
**
预先知道各个功能函数function_num()参数,并且参数相同的情况下,使用该函数名function_num作为函数Option参数,执行不同的function_num函数的功能
return_type (*p_name)(arg_list);
//表示返回值为return_type,参数列表为arg_list的函数指针p_name.
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct workmate
{
int idNum; //编号
char nameChina[20]; //中文名
char nameEnglish[20]; //英文名
char sex[20]; //性别
}WorkMate;
int Output1(WorkMate laborer)
{
printf("Id: %d\n", laborer.idNum);
return 1;
}
int Output2(WorkMate laborer)
{
printf("China Name:%s\n", laborer.nameChina);
return 2;
}
int Output3(WorkMate laborer)
{
printf("English Name:%s\n", laborer.nameEnglish);
return 3;
}
int Output4(WorkMate laborer)
{
printf("Sex:%s\n", laborer.sex);
return 4;
}
void OutputOpt(WorkMate worker, int(*OutputInfo)(WorkMate laborer))
{
int optNum = (*OutputInfo)(worker);
printf("Operation number:%d\n\n", optNum);
}
int main()
{
WorkMate worker;
worker.idNum = 2;
//三种方式给数组赋值
char nameC[20] = {"ZhangSan"}; //数组
char *nameE = "Jack"; //指针
gets(worker.sex); //标准输入
strcpy(worker.nameChina, nameC); //给数组赋值
strcpy(worker.nameEnglish, nameE); //或memcpy
//函数参数为不同的函数名(函数名为指令入口地址),执行不同的输出任务
OutputOpt(worker, Output1);
OutputOpt(worker, Output2);
OutputOpt(worker, Output3);
OutputOpt(worker, Output4);
system("pause");
return 0;
}
输出:
Man
Id: 2
Operation number:1
China Name:ZhangSan
Operation number:2
English Name:Jack
Operation number:3
Sex:Man
Operation number:4
请按任意键继续. . .