C 中函数指针的正确值类型

尼尚

我试图理解 C 中的函数指针。在互联网上阅读它时(主要是堆栈溢出 QA) - 我遇到了两种可以为函数指针赋值的方法

#include <stdio.h>

double add(int a, double b) {
  return a + b;
}

double subtract(int a, double b) {
  return a - b;
}

int main() {
  int op_a = 23;
  double op_b = 2.9;

  // Case 1. Just pass the function (not its address)
  double (*math_op)(int a, double b) = add;
  printf("The output of Math Operation %f\n", math_op(op_a, op_b));

  // Case 2. Pass the function's address
  math_op = &subtract;
  printf("The output of Math Operation %f\n", math_op(op_a, op_b));

  printf("End of program\n");
  return 0;
}

我有几个问题

  1. 在上面的代码中 - 为函数指针赋值的正确方法是什么。我看到一些关于堆栈溢出的答案,它们遵循案例 1 中遵循的约定,我还看到一些遵循案例 2约定的答案两者似乎对我来说都正常工作。哪个是正确的(或更可取的)?
  2. 此外,为了调用函数指针,我看到了两种调用它们的方式 -math_op(op_a, op_b)(*math_op)(op_a, op_b). 同样,是否有更好的方法来做到这一点 - 两者似乎对我来说都正常工作。
旗鱼

我认为

函数调用(第 6.5.2.2/1 节)

表示被调用函数的表达式应具有指向返回 void 或返回数组类型以外的对象类型的函数的类型指针。

足以回答你的两个问题。函数的名称被隐式转换为指向函数类型的指针,因此在将函数地址分配给函数指针时使用地址运算符是多余的。至于通过函数指针调用函数,语法与“普通”函数调用没有什么不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中的函数没有返回正确的指针类型?

来自分类Dev

函数不使用 C 中的指针返回正确的值

来自分类Dev

在不使用指针的情况下,在C ++中返回“无效值”类型的正确方法是什么?

来自分类Dev

在类中分配函数指针会导致C ++中的值类型错误

来自分类Dev

如何正确使用从函数接收的指针?(在C中)

来自分类Dev

C中的函数未返回正确的值

来自分类Dev

使用strcpy()在C中为指针正确分配值

来自分类Dev

函数调用中的指针类型不兼容-C

来自分类Dev

函数返回指向C中数组类型的指针

来自分类Dev

在qsort()中的compare函数中使用结构的值-C99-将指针解引用为不完整类型

来自分类Dev

C中的指针(指针的值)?

来自分类Dev

C ++中的函数指针

来自分类Dev

在 C 风格的指针值中是垃圾,但在智能指针中是正确的

来自分类Dev

指针在C中的值

来自分类Dev

从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

来自分类Dev

为什么在C ++中返回类型不能是函数类型而是函数指针?

来自分类Dev

如何在C中打印函数指针的值?

来自分类Dev

如何在C函数中通过++更改指针的值?

来自分类Dev

C中的void函数指针返回值

来自分类Dev

C中的指针函数:来自不兼容指针类型的foo初始化

来自分类常见问题

C函数的正确返回类型?

来自分类Dev

C函数的正确返回类型?

来自分类Dev

C中的类型转换指针

来自分类Dev

C ++如何正确复制指针的值

来自分类Dev

指向C ++中的函数指针的指针

来自分类Dev

专门研究使用通用迭代器作为指针值类型的C ++模板函数吗?

来自分类Dev

C函数指针类型兼容性

来自分类Dev

函数指针类型的c ++模板调用

来自分类Dev

c中的指针和函数

Related 相关文章

热门标签

归档