假设我如下声明一个函数指针数组:
typedef void (*ptr[4])(int a, int b)={fn1,fn2,fn3,fn4};
现在我宣布,
ptr *ptr_to_fn_arr;
问题是,如何使用指针变量 ptr_to_fn_arr
调用任何函数(fn1、fn2、fn3、fn4)?
typedef
用于为其他数据类型创建别名,您不能初始化类型。
所以,这是错误的:
typedef void (*ptr[4])( int a, int b)={fn1,fn2,fn3,fn4};
^^^^^^^^^^^^^^^^^
相反,你应该这样做:
typedef void (*ptr[4])( int a, int b);
这将为 4
函数指针数组创建 ptr
作为 类型,该数组采用两个 int
类型作为参数并且不返回任何值。
现在使用这个别名 ptr
您可以创建其类型的变量,如下所示:
ptr x = {fn1, fn2, fn3, fn4};
这将初始化变量 x
,它是 4
类型 ptr
函数指针的数组。
你可以这样调用它:
x[0](1, 2); // this is equivalent to fn1(1, 2)
x[1](1, 2); // this is equivalent to fn2(1, 2)
....
.... and so on.
但是声明
ptr x = ...
只是看一下,x
似乎不是一个数组,直到您查看 ptr
typedef。
所以,为了更好的可读性,你可以这样做:
typedef void (*ptr)( int a, int b);
这将创建 ptr
作为函数指针的类型,它接受两个 int
类型作为参数并且不返回任何值。
现在要创建类型为 ptr
的 4
函数指针数组,您可以这样做:
ptr x[4] = {fn1, fn2, fn3, fn4};
以类似的方式调用它:
x[2](1, 2); // this is equivalent to fn3(1, 2)
我是一名优秀的程序员,十分优秀!