函数指针的别名

时间:2018-06-06 10:17:48

标签: c pointers typedef

当我们有:

           int functon1(int a, int b);
           int function2(int a, int b);
           .....

           typedef int (*callback) (int,int);

           struct gate{
                  char name[50];
                  callback fptr;
                  };

我们在哪里给了typedef和别名以及回调fptr是什么? (int,int)是(* callback)的别名吗?

2 个答案:

答案 0 :(得分:3)

此声明

typedef int (*callback) (int,int);

/* now callback can be used as a type */

您正在键入一个函数指针。这里callback是一个函数指针,可以指向任何函数,函数必须采用int类型的两个参数并返回int

下次你喜欢的时候

callback fptr;

这意味着fptr函数指针,它可以指向满足callback声明属性的任何函数。

接下来初始化fptr这样的

struct gate var;

var.fptr = sum; /* here sum is the function which adds 2 int and returns int */

答案 1 :(得分:1)

typedef用于定义新类型。 这个typedef int (*callback) (int,int);的含义是您定义了一个名为callback的新类型。您可以使用此类型来定义变量。类型为callback的变量实际上是指向函数的指针,该函数需要两个int并返回int

此解释适用于您将struct gate定义为fptr类型的callback

这是一个简单的例子:

#include <stdio.h>

int function1(int a, int b);
int function2(int a, int b);

typedef int (*callback) (int,int);

struct gate{
     char name[50];
     callback fptr;
};


int main(void) {
    struct gate g;
    g.fptr = function1;
    printf("The sum is: %d\n", g.fptr(4, 5));
    return 0;
}

int function1(int a, int b)
{
    return a + b;
}

运行上述程序显示: The sum is: 9