c++ - 无法理解代码/函数调用

标签 c++ c function-pointers typedef function-calls

<分区>

与问题相关的声明是:

typedef void (*struct_c)(
    pid_t,  
    const uint_t *,
    struct_a,       
    struct_a,       
    void *);

void func1(struct_a s, struct_a e, struct_d init, struct_c range, struct_e fini, void *arg);
static void add_range(pid_t mgid, const uint_t *propids,struct_a s, struct_a e, void *arg);

有一个函数调用如下:

func1(s, e,NULL,add_range, NULL, &ranges);

参数 add_range 是一个函数名,没有其他同名变量。

我不明白函数调用 func1 是如何工作的,它的参数是什么。

如果您需要更多详细信息,请告诉我。

最佳答案

struct_c 是一个函数指针

void func1(struct_a s, struct_a e, struct_d init, struct_c range, struct_e fini, void *arg);

在其第三个参数中包含函数指针,即 struct_c range 匹配函数指针的原型(prototype)

typedef void (*struct_c)(
    pid_t,  
    const uint_t *,
    struct_a,       
    struct_a,       
    void *);

以及 add_range 函数的原型(prototype)。

static void add_range(pid_t mgid, const uint_t *propids,struct_a s, struct_a e, void *arg);

简单来说,

函数指针指向函数,因为, 整数指针指向整数等。

关于c++ - 无法理解代码/函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997506/

相关文章:

c++ - C++ 是否提供线程安全的引用计数器?

c - 在结构中存储员工详细信息的程序

c - 使用/proc 在 Linux 中打印正常运行时间和理想时间

c# - 泛型 C# 的重载运算符

c++ - delete[] 是否调用析构函数?

c++ - 派生类如何使用虚拟基类的实例?

c++ - 没有执行策略的 std::transform_reduce 是否可移植?

c - 如何比较两个字符串(两者)都存储在 char 双指针中?

你能把 "pointer to a function pointer"转换到 void*

c++ - 指向类成员的指针