您的位置:首页 > 编程语言 > C语言/C++

199 c 通过函数名字符串调用函数

2016-09-20 22:30 316 查看

通过函数名字符串调用函数

今天写c的作业时候想起来能不能用函数名字符串来调用函数

一、函数指针

第一个问题,函数名如何保存,我们需要用到函数指针

声明

type (*func)(type &,type &)


该语句声明了一个指针func,它指向了一个函数,这个函数带有了2个type型参数并返回一个type的值。

p.s. type类型可以被看成是int啊或者是floast等C++的类型。

注意事项

一个指向函数的指针必须确保该函数被定义且分配了内存,否则它将指向一个空地址,这个可是大忌!

特别注意第一个括号的位置。如果我们不写括号,如下:

type *func(type ,type)


这就不是一个指向函数的指针了,而是声明了一个函数,该函数返回一个type类型的指针 

小栗子

func1()
{
printf("this is func1!\n");
}

void main()
{
void (*funcP)();
funcP = &func1;
(*funcP)();
}


二、字符串调用函数

#include <stdio.h>
//没有会报错
#include <string.h>

//自定义了一个函数指针类型 ,指向的函数参数是void而且返回值也是void
//注意 不是取void的别名
typedef void (*funcP)();

void func1(){
printf("this is func1!\n");
}

void func2(){
printf("this is func2!\n");
}

funcP getFuncPointer(char* sfuncname){
if(strcmp(sfuncname,"func1")==0){
//取函数地址
return &func1;
}else if(strcmp(sfuncname,"func2")==0){
return &func2;
}
return NULL;
}

void main(){
char c[20] = "\0";
funcP funcp = NULL;
printf("please input func name:");

//字符数组 c是 char* 类型
scanf("%s",c);  //input func1 or func2
funcp = getFuncPointer(c);
if(funcp!=NULL){
//取函数指针的值并用()调用
(*funcp)();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  源码 指针 c语言