【问题标题】:What does this typedef declaration do?这个 typedef 声明有什么作用?
【发布时间】:2013-09-25 13:06:07
【问题描述】:

我知道 typedef 是做什么的,但这个陈述似乎让我感到困惑。

typedef int (*funcptr)();

此声明

funcptr pf1,pf2

这个意思

int (*pf1)(),(*pf2)();

然后如何在程序中使用pf1pf2。如何输入这些值。 还有它有什么用。

【问题讨论】:

    标签: c pointers function-pointers typedef


    【解决方案1】:

    您的typedef 定义了函数指针的类型。取一个函数指针的“值”没有任何意义:它是一个指向一段可执行代码的指针;您需要调用它以使其有用。

    您通过指针调用函数的方式与您通过名称知道的函数相同,即通过将带括号的参数列表附加到指针。

    您可以使用pf1pf2 执行以下操作:

    // These functions return an int and take no parameters.
    // They are compatible with funcptr
    int function5() {
        return 5;
    }
    int functionAsk() {
        int res;
        printf("Enter a value: ");
        scanf("%d", &res);
        return res;
    }
    // This function does not know what fp1 does, but it can use it
    void doSomething(funcptr fp1) {
        int res = fp1();
        printf("Function returned %d", res);
    }
    // Here is how you can call doSomething with different function pointers
    pf1 = functionAsk;
    doSomething(pf1);
    pf2 = function5;
    doSomething(pf2);
    

    注意在最后四行中,doSomething 的两个调用如何根据您传递的内容执行不同的任务:第一个调用提示用户输入一个条目,而第二个调用立即返回五个。

    【讨论】:

      【解决方案2】:

      这是一个非常人为的示例代码,但它说明了如何使用typedef 函数指针。

      #include <stdio.h>
      typedef int (*funcptr)();
      
      int return1(void){return 1;}
      int return2(void){return 2;}
      
      int main()
      {
          funcptr pf1, pf2;
          pf1 = return1;
          pf2 = return2;
          printf("%d, %d\n", pf1(), pf2());
          return 0;
      }
      

      输出:1, 2

      【讨论】:

        【解决方案3】:

        pf1 和 pf2 现在是函数指针......如果你想让它们指向一个函数,你应该写 pf1=yourfunctionname..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-06
          • 1970-01-01
          • 2015-06-07
          相关资源
          最近更新 更多