定义了一个简单的函数func1, 调用的时候只需要"函数名()" 的方式就可以调用的到。(至于调用的过程是如何处理的,就要参考汇编的知识了。)
但是,在实际的开发过程中可能会遇到这种情况, 函数名事先并不确定,函数名是通过一个字符串变量保存的,这种状况该如何调用呢?
更具体一点的例子,函数名是通过外部输入进去了。
该如何执行func1呢?
解决以上问题之前, 首先引入函数指针的概念。
在C语言中,某一数据变量的内存地址可以存储在相应的指针变量中,比如 int * , char * 等,
对于函数来说,也同样如此,函数的首地址也可以存储在某个函数指针变量里,通过这个函数指针变量我们就可以调用所指向的函数了。
如何定义函数指针变量? 很简单。
对应到上面 func1 函数,可以定义如下的指针变量。
void (*funcP)()
funcP这个名字可以随便取。
/************************
* add by oscar999
************************/
func1()
{
printf("this is func1!\n");
}
void main()
{
void (*funcP)();
funcP = &func1;
(*funcP)();
}
有了如上的例子,不难想到:
如果事先定义一些函数指针,通过传入的函数名字串,得到相应的函数指针,就可以实现函数调用了。
[cpp] view plaincopyprint?
/************************
* add by oscar999
************************/
#include <stdio.h>
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:");
scanf("%s",c); //input func1 or func2
funcp = getFuncPointer(c);
if(funcp!=NULL)
{
(*funcp)();
}
}
/************************
* add by oscar999
************************/
#include <stdio.h>
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:");
scanf("%s",c); //input func1 or func2
funcp = getFuncPointer(c);
if(funcp!=NULL)
{
(*funcp)();
}
}
你可能会想,通过传入的string 直接调用对应的function不就可以了吗?类似:
[cpp] view plaincopyprint?
/************************
* add by oscar999
************************/
#include <stdio.h>
typedef void (*funcP)();
void func1()
{
printf("this is func1!\n");
}
void func2()
{
printf("this is func2!\n");
}
void main()
{
char c[20] = "\0";
funcP funcp = NULL;
printf("please input func name:");
scanf("%s",c); //input func1 or func2
if(strcmp(c,"func1")==0)
{
func1();
}else if(strcmp(c,"func2")==0){
func2();
}
}
/************************
* add by oscar999
************************/
#include <stdio.h>
typedef void (*funcP)();
void func1()
{
printf("this is func1!\n");
}
void func2()
{
printf("this is func2!\n");
}
void main()
{
char c[20] = "\0";
funcP funcp = NULL;
printf("please input func name:");
scanf("%s",c); //input func1 or func2
if(strcmp(c,"func1")==0)
{
func1();
}else if(strcmp(c,"func2")==0){
func2();
}
}
以上这种对于 function 较少的状况可以使用, 但是func很多的话, 或者动态的生成这部分的话,指针函数的方式就很好了。
函数名字串和函数指针放到一个name value set 中去, 这样就可以很容易得到函数指针了。
温馨提示:内容为网友见解,仅供参考
菜鸟学C语言方法调用不知道哪里不对请大神指点
\/*1:整体修改了下一些格式,让代码更容易阅读 。2:修改了一些内容,在代码中有注释。*\/ #include <stdio.h>int year(int y);int month(int mon,int year);int main(void){ int ye; int mon; printf("请输入年份:"); scanf("%d",&ye); int yea = year(ye); ...
C语言中函数调用的问题?
关于c语言中函数调用问题解答如下:首先如果是编译的这个代码那这个函数肯定被调用了,让你觉得没有调用是因为while循环没有被执行。图中红色框内代码p1和p2经过赋值p1是肯定大于p2所以不满足while.的条件直接退出了函数。你需要看看要实现啥在改一下。
为什么我的C语言程序在调用函数时出现错误?
1、一般是你在调用函数的时候传递的是int类型的数据,但那个函数定义的参数类型不是int(比如是结构或者指针或者数组)。2、下面为C语言的错误大全及中文解释:1: Ambiguous operators need parentheses — 不明确的运算需要用括号括起2: Ambiguous symbol xxx — 不明确的符号3: Argument list syntax error — 参数表...
c语言中函数调用有三种方法,能帮忙各举个例子吗?
1、voidbb(intcc);};实际上bb的函数原形是voidbb(aa&this,intcc);以前知道类的成员函数在调用时会传入一个this指针,而不晓得thiscall就是专门指定了这种调用方式。2、C语言中调用函数的方法及步骤:工具\/原料:C语言首先需要输入想要调用的函数。然后当输入一个括号后,即可观察他的参数。接着在...
C语言如何调用函数
1、打开CFree,按ctrl加N创建一个新的文件。2、然后开始调用函数。3、按F9进行调试后发现没有错误。4、按F5执行程序。5、输入想要输入的数字。6、按ENTER键输出结果,检验符合结果,说明函数调用成功。
C语言中函数的调用有哪些步骤?
long p=1;初始化。p *= m;初始化。long s = 0;累加。s += power(i,k);累乘计算。这类题弄清楚每个函数做什么,涉及哪些量,和函数之间的调用关系。初始化、循环计算、返回结果是最常见的3个步骤,其中第2步可以是基本运算,也可以是调用其它函数完成某个功能。
C语言中函数调用问题
首先我们来说一下,你这个程序是有很大的问题的。函数有且只有唯一一个返回值,当程序执行到return的时候,这个函数就结束并返回了。所以,你这里写2个return来返回最大值和最小值是不可能的。再者,如果你想使用返回值作为最大值,最小值的传递,那么在main函数中,你调用star函数的时候需要一个变量...
C语言中函数调用有几种情况
1:声明函数,然后直接在函数体内调用函数,这样的做法是先保存当前函数执行的地址,然后查找函数指针,找到函数声明,再找到函数实现,创建一个函数堆栈,直接在函数堆栈里面操作,然后将返回值传给主函数。然后通过之前保存的地址,继续执行之后的代码。过程比较复杂。2:内联函数和动态库调用,这俩种方法...
c语言中怎么调用函数
函数调用方法就这几种 1、直接调用,这种函数一般没有返回值,或者不需要返回值 如 printf("你好,可以直接调用printf函数的!")2、表达式调用,比如对于用户写的一个求最大值函数int max(int a,int b),一般有返回值 如 c=max(6,9) 也就是要用一个量来接收函数返回来的值。3、参数调用...
c语言函数调用问题 (回答好追加100分)
\/* 本部分代码功能建议:调用用户自定义函数找出每一行上的最大值的列下标并按示例格式要求显示 *\/ \/* User Code Begin(Limit: lines<=1, lineLen<=50, 考生可在本行后添加代码、最多1行、行长<=50字符) *\/ fun(juZhen,m,n);\/* User Code End(考生添加代码结束。注意:空行和单独为一行...