gpt4 book ai didi

c - 如何使用另一个指针访问函数指针数组的元素并依次调用其中一个函数?

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:04 25 4
gpt4 key购买 nike

假设我如下声明一个函数指针数组:

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 类型作为参数并且不返回任何值。

现在要创建类型为 ptr4 函数指针数组,您可以这样做:

ptr x[4] = {fn1, fn2, fn3, fn4};

以类似的方式调用它:

x[2](1, 2); // this is equivalent to fn3(1, 2)

关于c - 如何使用另一个指针访问函数指针数组的元素并依次调用其中一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51303858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com