我无法理解定义指针变量。你能救我吗?
double(*)(double *) foo;
注意:sory,我将变量func的名称编辑为foo。
答案 0 :(得分:8)
这不是有效的C.也许你的意思是:
double(*func)(double *);
将func
声明为指向函数的指针,该函数将指针指向double,并返回double。
您可以使用http://cdecl.org进行此类操作。
答案 1 :(得分:0)
它是一个指向函数的指针,该函数返回double,其类型指针的参数为double,如果你更正变量声明,因为它只是不正确的正确语法double (*foo) (double*)
通过能够替换函数来使用多态:
struct memory_manager{
void*(*getmem)(size_t);
void(*freemem)(void*);
}mem_man;
void* always_fail(size_t){return 0;}
void* myalloc(size_t s){
void* p=mem_man.get_mem(s);
if(p) return p;
mem_man.getmem=always_fail;
return 0;
}
void myfree(void* p){
if(p) freemem(p);
}
它不是真正的c ++方式,因为在大多数情况下,继承和虚函数提供了更好的解决方案,但是如果你被限制为c,那么你可以使用这种技术来模拟虚函数。
答案 2 :(得分:0)
试试这个(测试过):
// functions that take double * and return double
double dfunc(double *d) { return (*d) * 2.0; }
double tfunc(double *d) { return (*d) * 3.0; }
int main()
{
double val = 3.0;
double // 3. the function returns double
(*pFunc) // 1. it's a pointer to a function
(double *); // 2. the function takes double *
pFunc = dfunc;
printf("%f\n", pFunc(&val)); // calls dfunc()
pFunc = tfunc;
printf("%f\n", pFunc(&val)); // calls tfunc()
}
输出:
6.000000
9.000000