功能指针疑问

时间:2009-10-28 07:42:51

标签: c function pointers return-value

请告诉我给定功能的回叫是什么以及如何回复?代码:

typedef struct {
    int size;
    ptrdiff_t index;
    void (*inlet) ();
    int argsize;
    ptrdiff_t argindex;
} CilkProcInfo;


/*
 * Returns a pointer to the slow version for a procedure
 * whose signature is p.
 */

/* the function definition is - */
static void (*get_proc_slow(CilkProcInfo *p)) () {
     return p[0].inlet;
}

/*The function gets called as -*/
   (get_proc_slow(f->sig)) (ws, f);
/*where f->sig is a pointer to CilkProcInfo struct*/

4 个答案:

答案 0 :(得分:5)

CilkProcInfo结构中,inlet是指向未指定数量的参数且不返回值的函数的指针,如void foo();

在第

(get_proc_slow(f->sig)) (ws, f);

get_proc_slow(f->sig)调用返回此函数指针,因此它等同于

(f->sig[0].inlet) (ws, f);

因此,如果您的f->sig[0].inlet指向函数foo(),那么它等同于调用

foo (ws, f);

我应该承认static void (*get_proc_slow(CilkProcInfo *p)) () {...语法对我来说有点陌生。

答案 1 :(得分:1)

get_proc_slow()返回一个类型为void(*)()的函数指针,然后代码调用该指针。所以当你这样做时:

(get_proc_slow(f->sig)) (ws, f);

与基本相同:

void (*fptr)() = get_proc_slow(f->sig);
fptr(ws, f);

答案 2 :(得分:0)

看起来它是一个返回指向函数的指针的函数,该函数的返回值为void,没有参数(void(*)())并且接受指向CilkProcInfo struct的指针作为参数。我不确定为什么你需要p[0].inlet结构。你不能把它作为p->inlet返回吗?

哦是的,get_proc_slow是返回所述函数指针的函数的名称。

答案 3 :(得分:0)

static void (*get_proc_slow(CilkProcInfo *p)) () {
     return p[0].inlet;
}

从名称中读取,注意语法规则:get_proc_slow是一个函数(带有内部链接),它接受指向CilkProcInfo结构的指针并返回指向未指定的函数的指针参数并且不返回任何值(void)。

(get_proc_slow(f->sig)) (ws, f);

此语句使用适当的参数调用get_proc_slowf->sig是指向CilkProcInfo的指针),然后使用返回值(指向函数的指针)来调用该函数以wsf作为参数。