c - 函数指针疑问

标签 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*/

最佳答案

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)) () {... 语法对我来说有点陌生。

关于c - 函数指针疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635704/

相关文章:

c - 为什么 printf() 允许这个 double 通过指针传递?

c - 如何修改多参数宏的参数?

javascript - 编写一个函数,将数组中的每一项加倍

javascript - 尝试创建一个 JS 类(带有函数)

c++ - 无法使用 square() 函数 c++

c - 在c中打印链表值时出现奇怪的值

c - 使用和不使用 & 传递指向函数的指针

c - C 中使用三元运算符进行版本字符串比较

c++ - "Undefined Behavior"真的允许*任何*发生吗?

c++ - 将指针地址更改为另一个对象