首先解释一下 &st 的问题吧:&st 就是取结构体的 st 的地址传给结构体内的函数 p 和 o, 根据前面 st 的定义,也就是传给 print 和 power。这样 print 和 power 函数就可以读取结构体中的 i 和 x 值。
然后沿着各个思路,可以写出 print 和 power 函数,如下:
void print(ST *st){
printf ("%g", st->x);
}
void power(ST *st){
int k;
double y=1;
for (k=0;k
st->x = y;
}
不过这里有个问题,就是你之前的 struct 中定义的函数指针是没有参数的,但是主函数调用时是有参数的,这是矛盾的呀。要改一下:
struct ST{
int i;
double x;
void (*o)(ST*);
void (*p)(ST*);
} ;
就没有问题了。
&st函数地址
void print(St st){
double y;
y=st->x;
while(st->i>1){
y*=st->x;
st->i--;
}
printf("%f\n",y);
}
=============================
&st为取结构体的首地址,即通过地址传递st
楼下给结构体函数指针声明参数者多此一举,
楼下不使用math.h中pow函数者的代码在print函数里实现了计算与显示,其代码内聚度非常差(即功能不单纯),且要求中以有要求写power功能,c作为面向过程编程应该高内聚度低耦合度。另外其实现的求幂只能局限与整数幂,也为败笔。
以下代码纯粹是按要求实现,没有对作者原型做任何修改
==============================
//
//func.c
//To compile, use: cl func.c
#include
#include
typedef struct{
int i;
double x;
void (*o)();
void (*p)();
} ST;
void print(ST* st);
void power(ST* st);
int main()
{
ST st={2,2.5,print,power};
st.p(&st);
st.o(&st);
return 0;
}
void print(ST* st)
{
printf("结果为%f",st->x);
}
void power(ST* st)
{
st->x=pow(st->x,st->i);
}
&st代表取st这个结构体数据的地址。p函数和o函数的原型不是表明它们不接受参数的么?怎么下面会传参给它们?