定义指针变量

时间:2010-10-20 21:34:20

标签: c++ variables pointers

我无法理解定义指针变量。你能救我吗?

double(*)(double *) foo;

注意:sory,我将变量func的名称编辑为foo。

3 个答案:

答案 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