【问题标题】:function typedef and call to function from struct in C函数typedef并从C中的struct调用函数
【发布时间】:2018-11-07 15:57:44
【问题描述】:

我正在尝试找出以下代码。 特别是与函数typedef相关的部分。

#include <stdio.h>
void foo1(int var1, int var2); // foo1 decleration
typedef void (foo2)(int var1, int var2); // what is this exactly?

typedef struct somestruct{
    foo2* somefunc;
}SOMESTRUCT;

int main()
{
    SOMESTRUCT struct1;
    struct1.somefunc = &foo1; 
    struct1.somefunc(1,5);
    return 0;
}

void foo1(int var1, int var2){
    printf("this is function inside struct var1 = %d var2 = %d",var1, var2);
}

【问题讨论】:

  • typedef 创建一个类型 SOMESTRUCT。您声明一个实例 struct1。您在 struct1 中设置函数,然后调用它。
  • 这篇文章的答案可能对stackoverflow.com/questions/1591361/…有帮助

标签: c struct typedef


【解决方案1】:

线...

typedef void (foo2)(int var1, int var2); // what is this exactly?

...声明一个新类型foo2,作为一个接受两个int参数并返回void的函数。

在后面的代码中,函数foo1的地址(与函数签名匹配)存储在struct1somefunc成员中,然后被调用。带有参数 1 和 5。

【讨论】:

    【解决方案2】:

    Tim Randall 的解释很好,但让我补充一下。

    typedef 关键字定义了一种新的数据类型,可以用来代替原来的定义。如果您不想使用typedef,则可以将结构定义为:

    typedef struct somestruct{
        void(*somefunc)(int a,int b);
    }SOMESTRUCT;
    

    在这种情况下,我们并没有节省太多,但如果我们有多个函数指针,使用typedef 可以节省很多,并使程序更易于阅读。

    【讨论】:

      猜你喜欢
      • 2017-06-14
      • 2017-05-13
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多