当我们有:
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)的别名吗?
答案 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