【问题标题】:What are Function Pointers?什么是函数指针?
【发布时间】:2014-03-27 04:14:08
【问题描述】:

什么是简单英语的函数指针?

【问题讨论】:

    标签: c function callback function-pointers


    【解决方案1】:

    简单的英文,

    FUNCTION_POINTER 是指向地址的指针 函数的第一条指令,像一个指向 变量的地址。

    举个程序例子来理解概念

    直到用户 i/p 的所有整数的总和

    -

    #include <stdio.h>
    
    int IsAny(long n)
    {
        return 1;
    }
    
    long AddIf(long limit, int (*funPointer)(long))
    {
        long sum = 0;
        register int i;
    
        for(i = 1; i <= limit; ++i)
        {
            if(funPointer(i))
                sum += i;
        }
    
        return sum;
    }
    
    int main(void)
    {
        long l, total;
    
        printf("Enter a positive integer: ");
        scanf("%ld", &l);
    
        total = AddIf(l, IsAny);
        printf("Sum of all integers upto %ld is %ld\n", l, total);
    }
    

    这里调用FUNCTION_POINTER来调用AddIf中的IsAny函数,并声明 作为int (*funPointer)(long))AddIf 函数中

    【讨论】:

      【解决方案2】:

      正如你用简单的英语问的那样,让我们​​试一试。

      指针是内存中的地址。指针具有类型,因此程序可以在使用指针时“找到”您所引用的对象。

      函数指针使用相同的逻辑。它声明了一个将要使用的函数,例如有一个方法参数。因此,您知道您将使用一个函数,该函数将在该方法中具有输入和输出,但不需要知道该函数中的逻辑。

      您可以从那里发送任何函数指针以用作程序唯一关心的是您将发送和接收预定义的类型。

      【讨论】:

      • 如果我不清楚,请不要犹豫,按照您的要求,我会尽力用 PLAIN ENGLISH 说清楚。一项艰苦但有趣的运动:)
      【解决方案3】:

      根据维基

      函数指针(或子程序pointer或过程指针)是third-generationprogramming languages支持的指针类型(如PL/ICOBOLFortran1dBASE dBL、和C) 和object-oriented programming languages(例如C++D)。2 函数指针指向内存中的可执行代码,而不是指向数据值。当dereferenced 时,可以使用函数指针来调用它指向的function 并像普通函数调用一样向其传递参数。这种调用也称为“间接”调用,因为函数是通过变量间接调用的,而不是直接通过固定名称或地址。函数指针可用于通过提供一种简单的方法来根据运行时值选择要执行的函数来简化代码。

      【讨论】:

        【解决方案4】:

        Pointer = 保存变量地址或表示简单内存。 和指针一样,函数指针保存函数的地址。

        语法: 返回类型 (*fp) (参数);

        例子:

        void f1()
            {
              printf("in function f1");
            }
        int main()
        {
          /* declaring a function pointer
           * argument void 
           * return type is also void
           */
        
          void (*fun_ptr) (void);  
          fun_pt= f1();  // fun_pthold the address of f1
          (*fun_pt)();    // calling a function f1 
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-03
          • 2011-05-19
          • 2016-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多