C语言中方法的调用问题

我有一个自定义方法叫print(),我想在main()函数中调用它,并且返回一句话voidmain(){print();}voidprint(){printf("我调用的... 我有一个自定义方法叫print(),我想在main()函数中调用它,并且返回一句话
void main()
{
print();
}

void print()
{
printf("我调用的是print方法");
}
这样写有一个错误,我不知道语法应该怎么写
展开
 我来答
许诗文00
2015-07-11 · TA获得超过4290个赞
知道小有建树答主
回答量:425
采纳率:100%
帮助的人:25.9万
展开全部
定义了一个简单的函数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 中去, 这样就可以很容易得到函数指针了。
百度网友4e8610838
2011-02-21 · 超过10用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:0
展开全部
自定义方法如果放在主函数的下面,需要进行函数说明。
解决方法:在主函数上面加上void print();
或者直接将自定义方法拿到主函数上面去,可以避免错误。返回值用return语句返回
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
斯坦恩贝格(北京)电子有限公司
2015-08-31 · 斯坦恩贝格生产销售“希曼顿”牌固态继电器、电力调整器,温控器
斯坦恩贝格(北京)电子有限公司
斯坦恩贝格生产销售“希曼顿”牌固态继电器、电力调整器,温控器
向TA提问
展开全部
C语言中方法实际就是函数的调用。
自定义函数如果放在主函数的下面,需要进行函数说明,即在主函数上面加上函数声明,或者在主函数上面定义自定义函数,可以避免错误。返回值用return语句返回。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
532584039
2012-05-24
知道答主
回答量:21
采纳率:0%
帮助的人:10万
展开全部
要调用没有返回值类型的方法,你可以给他们设置同类型的参数,就可以调用了。。比如:
#include<stdio.h>
void max(int a,int b) //声明函数,并设置参数
{
printf("0.0");

}
void main()
{
int a,b;
max(a,b); //调用函数
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1366zet
2011-02-21 · TA获得超过648个赞
知道小有建树答主
回答量:813
采纳率:0%
帮助的人:569万
展开全部
void main()
{
struct student *head = create();
print(head);
}
不知是楼主表述不清还是我理解能力下降了,你的问题咋这么难看懂呢?
我的理解,你是说create返回时系统把内存收回了,主函数调用会内存出错?但是你返回的是指针,系统会保护你已经申请到的内存。你再把create返回的指针传给print,print就可以对你在create申请到的内存进行输出操作了。不知答对了没有。。。

参考资料: 百度一下

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式