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

来源:互联网 发布:足球阵容设计软件 编辑:程序博客网 时间:2024/06/05 05:58

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


今天写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)();    }}
0 0
原创粉丝点击