这是我第一次使用指向函数的指针。
我要做的是创建一个名为essay的函数,它会获得一个指向另一个函数的指针,一个整数num,然后num会加倍。
函数文章将参数相乘,然后将我收到的函数的值作为参数与乘积一起返回。
这听起来很复杂,但实际上非常简单。示例:
essay(sin,2,pi,1/2) will return the value of sin(pi/2)这是我的code...for不允许我发送指向函数sin的指针的原因。说没有重载函数sin的实例与参数列表匹配,但这正是我看到我的老师是这样做的……我想。
#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
#include <math.h>
double (*pfunc)(double);
double essay(double* pfunc(double),double num, ... )
{
int i;
double product=1,result;
va_list arguments;
va_start(arguments,num);
for(i=0;i<num;i++)
product*=va_arg(arguments,double);
va_end(arguments);
result=*(pfunc(product));
return result;
}
void main()
{
double x,y;
x=3.14159265358979323846;
y=0.5;
printf("%lf",essay(sin,2,x,y));
getch();
}发布于 2013-06-13 04:27:41
这是错误的
double essay(double* pfunc(double),double num, ... )在这里,你传递一个函数作为参数,返回一个指向双精度的指针,这是没有意义的,应该是:
double essay(double (*pfunc)(double),double num, ... )在这里,您将一个指针传递给一个函数,该函数返回一个双精度值并接收一个双精度值作为参数
发布于 2013-06-13 04:28:30
#include <stdio.h>
#include <stdarg.h>
#include <math.h>
// removed extra var
double essay(double (*pfunc)(double), double num, ...) // added parens
{
int i;
double product = 1, result;
va_list arguments;
va_start(arguments, num);
for (i = 0; i < num; i++)
product *= va_arg(arguments, double);
va_end(arguments);
result = pfunc(product); // removed extra parens
return result;
}
void main()
{
double x, y;
x = 3.14159265358979323846;
y = 0.5;
printf("%lf", essay(sin, 2, x, y));
}发布于 2013-06-13 04:44:10
这就是我要做的,假设一个C99编译器接受for循环中的变量声明和代码块中的任意点。注意,函数指针类型使用了typedef (MathFunc2适用于接受两个参数的函数,等等),参数列表中的值数使用了int (而不是double)。
#include <math.h>
#include <stdarg.h>
#include <stdio.h>
typedef double (*MathFunc1)(double);
static double essay(MathFunc1 function, int num, ...)
{
double product = 1.0;
va_list arguments;
va_start(arguments, num);
for (int i = 0; i < num; i++)
product *= va_arg(arguments, double);
va_end(arguments);
double result = (*function)(product);
return result;
}
int main(void)
{
double x = 3.14159265358979323846; // M_PI?
double y = 0.5;
printf("%f\n", essay(sin, 2, x, y));
}https://stackoverflow.com/questions/17074637
复制相似问题