重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
第五行:float (*p)();后面括号默认为void ,导致浮点型s和下面的p指针类型不符.改为(float,float)即可.
创新互联-专业网站定制、快速模板网站建设、高性价比屯昌网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式屯昌网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖屯昌地区。费用合理售后完善,十载实体公司更值得信赖。
倒数第三行,"5"前面你多打了个点,去掉就可以了.
调试之后程序正确.你试试看,还有,函数声明最好放在主函数前.
第一是:函数指针的使用 ,可以不用*号,也能正确使用
第二是:取出指针P对应的内容,加一后 使用
int find(char* source/*源串*/, char* target/*子串*/)//找到返回在源串中的位置,未找到返回-1,如果要改为找到返回1,把return i改为return 1;
{
int i,j;
int s_len=strlen(source);
int t_len=strlen(target);
if(t_lens_len)
{
return -1;
}
for(i=0;i=s_len-t_len;i++)
{
j=0;
int flag=1;
if(source[i]==target[j])
{
int k,p=i;
for(k=0;kt_len;k++)
{
if(source[p]==target[j])
{
p++;
j++;
continue;
}
else
{
flag=0;
break;
}
}
}
else
{
continue;
}
if(flag==1)
{
return i;
}
}
return -1;
}
函数指针一般用来做回调的,一般多线程用的多,因为线程之间,栈空间不一样。还有就是封装好的程序,做回调的,比如我写了一段程序,想要给你用,如果我内部没有回调,你就要改动我的程序。但我这样写,我的执行过程是123,二这个步骤,我用函数指针封装起来,如果等于空就不执行,然后你来用,只需要把我的函数指针,指向你的函数,我这个程序是不是就可以不改代码,然后把你的代码加到中间了,所以,函数指针除了线程中,通过传递消息,根据消息相互调用,之外,也是封装的一大利器,如果管理的好,还可以减少代码雍种,写的好,增加可读性。当然你可以不用,也能开发同样效果的东西,难度要大很多,特别是代码到千行以上
传函数指针给它作为参数而已,不一定要这个参数返回什么值的。
对于你的第二个问题:有调用才会有执行,仅仅传参不会执行任何东西
给你个不是很好的例子,你最好可以把add_cyc_timer和check_empty函数的定义代码也传上来:
uchar add_cyc_timer(uchar i, FUNCALLBACK *zune)
{
zune();//一定要意识到,这时其实就是调用了void check_empty(void),在该函数中可能会对某些值(例如全局变量)做出修改,但是这种修改不一定要通过返回值传给被调函数。
}