2014-02-20 137 views

回答

8

这是你将宣布在一个函数的参数列表double *参数以同样的方式:

void (* ptr) (double, double, double *, double *); 

可以被分配给一个函数,如:

void something (double w, double x, double *py, double *pz) { 
} 

这一般情况下都是如此,不管它有多复杂。例如,一个指针指向一个函数,它接受一个int和另一个函数指针(其指向采用一个doublevoid *的功能,并返回一个char*)作为参数:

void (* ptr) (int, char * (*) (double, void *)); 

然后:

char * g (double w, void *) { 
    ... 
} 

void f (int x, char * (* y) (double, void *)) { 
    ... 
} 

// usage, elsewhere: 
ptr = &f; 
ptr(0, &g); 
+0

顺便说一句,有时我发现'typedef'类型对语法上更简单的东西很有帮助。然后,我可以清楚地看到发生了什么,并将原始类型替换回来。例如,'typedef double * double_ptr'使'void(* ptr)(double,double,double_ptr,double_ptr)'清零,然后将'double * '回来显示你正确的语法。 –

相关问题