c++问题:用指向函数的指针计算sin(x),函数在运行时堆桟溢出

我写的代码如下:#include"stdio.h"#include"math.h"doubleh(doublex,double(*func)(double)){retur... 我写的代码如下:

#include"stdio.h"
#include"math.h"
double h(double x,double(*func)(double))
{ return ((*func)(x));}
double sin(double x)
{
return(sin((x*3.1415926)/180));
}
double cos(double x)
{
return(cos((x*3.1415926)/180));
}
double log(double x)
{
return(log(x));
}

void main()
{
double x,(*oper[3])(double);
int i;
printf("please put x:\n");
scanf("%lf",&x);
oper[0]=sin;
oper[1]=cos;
oper[2]=log;
for (i=0;i<3;i++)
printf("%lf",h(x,oper[i]));

}

warning:
warning C4717: “log”: 如递归所有控件路径,函数将导致运行时堆栈溢出
warning C4717: “cos”: 如递归所有控件路径,函数将导致运行时堆栈溢出
warning C4717: “sin”: 如递归所有控件路径,函数将导致运行时堆栈溢出
展开
 我来答
笃侠6A
2015-05-01 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3223万
展开全部
可能是因为自定义函数sin等和库函数重名的缘故。


double sin(double x)
{
return(sin((x*3.1415926)/180));
}

改为
double msin(double x)
{
return(sin((x*3.1415926)/180));
}

以及
oper[0]=sin;

改为
oper[0]=msin;

(其它几个函数做类似改动)
试试。
追问
谢谢!改过就可以了!
只要我自己定义的函数不和库函数重名就没有问题啦~~
作为一只初学者,看到下面出的问题自己都不明白是什么意思……
gnahziuggnip
推荐于2017-09-07 · TA获得超过507个赞
知道小有建树答主
回答量:469
采纳率:0%
帮助的人:266万
展开全部
把double sin (double x)改为double _sin (double x);
把double cos (double x)改为double _cos(double x);
把double log (double x)改为double _log(double x);
把oper[0]=sin改为oper[0]=_sin;
后面的两句做相应改动
更多追问追答
追问
谢谢您!
改完之后可以正常运行了!
可以在追问一下原因吗?(初学者,之前没有接触过_)
追答
加_(下划线),实际上就是让自己定义的函数和数学库函数取不同的名字。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式