首先要说明,你这个代码不是C#而是C++的,C#不做设置是不可以用指针的。
其次,你要注意这个tran函数的定义,其中前两个参数是函数指针,而且是具有一个double参数的函数,返回也是double,即 f(x) 格式的函数。
double tran(double (*f1)(double) , double (*f2)(double) ,double x)
主函数中,当执行 y=tran(sin,cos,v)时,sin和cos函数的地址与v一同被传递给tran,然后执行运算后返回给y。
return (*f1)(x)/(*f2)(x)
注意函数地址传入后是如何被调用的。进入tran后,sin函数的地址保存在f1,cos函数地址保存在f2,使用星号取得f1所保存的地址,用括号将x当做f1的参数,此时x即主函数的v值,这就是通过函数指针调用函数的格式,非常有用,非常灵活,你要熟练掌握。f2的调用也是一样,所以其等价与 return sin(x)/cos(x)。
现在理解了不?并非sin,cos不带参数,而是主函数中并没有直接去调用sin和cos,因为tran的前两个参数是函数指针,因此执行tran(sin,cos,v)时,是取sin和cos的函数地址然后传递给tran,在tran里面再将x传递给f1和f2,间接调用sin和cos。
忘了说明了,程序语言中的三角函数的参数不是角度,而是弧度,如果你给出的是角度,调用前必须要转换成弧度,公式为 弧度=角度 * 3.14/180。为什么不用角度,为了计算方便,那是数学问题了。