【问题标题】:Callback and curly braces in C? [duplicate]C中的回调和花括号? [复制]
【发布时间】:2022-01-14 21:07:24
【问题描述】:

我正在尝试将用 C 编写的脚本(我对这方面的知识为零)移植到 JavaScript 或 PHP 中。到目前为止,我已经可以解决大部分问题,但是这里有一个功能让我无法理解。

在文件https://raw.githubusercontent.com/Stellarium/stellarium/master/src/core/planetsephems/calc_interpolated_elements.c中,“main”函数是CalcInterpolatedElements,但在其参数中我们找到void (*calc_func)(const double t,double elem[],void *user)

这是什么 (*calc_func),它有什么作用?乍一看,函数CalcInterpolatedElements 似乎是用空数组调用的,这些数组......有点(?)由(*calc_func) 填充(?)来自......我不知道......呃!

有人可以帮忙吗?

【问题讨论】:

  • 你应该看看调用这个函数的代码,分析一下作为参数提供的函数是什么。
  • @Damien:这就是我尝试做的事情,但不知道/理解 C,这是我无法弄清楚的事情。这就是我在这里问的原因……

标签: c callback curly-braces


【解决方案1】:
void (*calc_func)(const double t,double elem[],void *user)

calc_func 是一个指向函数的指针,该函数接受三个没有返回值的参数 (void)。

我建议在 SO 上查看this post

【讨论】:

  • 我明白了,但我看不到函数是什么…… t、elem[] 和 *user 会发生什么?换句话说,它指向什么函数?
  • 这取决于您传递指针的函数的实现。 calc_func 可以指向 any 接受这些参数并返回 void 的函数。
  • 哎哟!我不知道那是什么……这就是我在这里问的原因……
  • 您是否查看了我在回答中链接到的文章?
  • 它指向一个函数。它指向哪个函数是在函数被调用时决定的。考虑一个非常简单的add 函数int add(int a, int b) { return a + b; } 通常我们这样称呼它:add(2, 3) 并得到5。如果我定义一个函数apply,它接受两个整数和一个函数指针作为参数,并用这两个整数调用指向的函数。 int apply(int a, int b, int (*f)(int, int)) { return (*f)(a, b); } 现在我可以打电话给:apply(2, 7, add) 我得到9
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2014-11-26
  • 2019-01-26
  • 2014-02-16
相关资源
最近更新 更多