【问题标题】:C pass pointer as argument in function [duplicate]C在函数中将指针作为参数传递[重复]
【发布时间】:2017-01-08 10:01:32
【问题描述】:

我遇到了以下代码:

int H3I_hook(int (*progress_fn)(int*), int *id)
{
...
}

我不明白第一个参数末尾的(int*) 的目的?

【问题讨论】:

  • 你明白它是指向函数的指针吗?
  • @usr: 甚至没有接近。
  • @usr:如果 OP 理解函数指针,我们就不会在这里了。
  • 在 K&R C 的书中有一个很酷的小程序,大约 pg 137 here 可以将复杂的指针声明解析为英文描述并返回。绝对值得一读
  • 我不明白第一个参数末尾(int*)的目的:“参数”和“参数”之间存在差异。您所说的参数实际上是一个参数。

标签: c function pointers parameters


【解决方案1】:

揭秘:

int (*progress_fn)(int*)

可以解释如下:

int (*progress_fn)(int*)
 ^       ^          ^
 |       |          |___________ pointer to integer as argument
 |       |
 |     pointer to any function that has V and takes ^
 |
 |__________________________return type an integer

【讨论】:

    【解决方案2】:

    鉴于此声明:

    int progress_callback(int* a);
    //                    ^ this is the (int*) you asked about
    

    您可以像这样拨打H3I_hook

    int id = something;
    int x = H3I_hook(progress_callback, &id);
    

    【讨论】:

    • 问题似乎与typedefs 无关。
    • @ScottHunter 我已经改变了,但答案使用typedef 来避免 int 指针和函数指针之间的混淆。
    【解决方案3】:

    int (*progress_fn)(int*)函数指针 decleration,(int *) 是函数接受的参数列表。

    所以,这个:

    int (*progress_fn)(int*)
    

    是一个指向函数的指针,该函数将返回一个int,并将接收一个int*类型的参数。

    所以你必须明白progess_fn实际参数。它的所有相关组件都定义了函数原型的实际情况。


    更多信息,请阅读How do function pointers in C work?

    【讨论】:

    • 也许你应该指出progress_fn是实际参数,剩下的就是你如何指定它的类型。
    • @ScottHunter 类似于我刚刚进行的编辑?
    • @gsamaras,栏下的部分比较多余。
    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2020-11-08
    • 1970-01-01
    • 2022-01-20
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多