在C语言程序中看到double ( (1) )={sin,cos,log};是什么意思,

问题描述:

在C语言程序中看到double ( (1) )={sin,cos,log};是什么意思,
}下述函数中定义一个指向函数的指针数组并循环接受一个整数X,在x的值为1,2,3时分别输出sin(0.5),cos(0.5),log(0.5)的值,假定程序中定义的指针数组名为pt,请填空.#include
#include
void main()
{ int x;
double ( (1) )={sin,cos,log};
do
{
scanf("%d",&x);
if(x3)
continue;
printf("The value is :%f",( (2) ));
}while(x!=-1);
}(1)处答案为(*pt[])(double v)或(*pt[3])(double v)
(2)处答案为(*pt[x-1])(0.5)
我想知道为什么答案是这样
1个回答 分类: 综合 2014-09-22

问题解答:

我来补答
sin,cos,log原型为double sin(double).它们的返回值和参数类型都一样,所以可用同样的函数指针来表示,即double (*p)(double)//其实和一般指针一样如:int* p;形式上怪些
所以(1)处,定义函数指针数组:
double (*p[])(double)={};//在定义的时候赋值如int* p[]={&a,&b,&c};//a b c为int变量
再在引用变量时用*解析(*pt[0])(v);//其实同int 型的一样:*p[0]
其实一般的做法是定义下面的指针类型:typedef double (*pf)(double)
然后用新定义的类型定义数组指针变量如下pf p[]={sin,cos,log};
其实调用函数用(*p[])() 和(p[])()都可以.
这东西用得少,形式上感觉怪,其实和一般指针一样,只要透过形式就好.多用一下熟悉下就没问题了
展开全文阅读