微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

指向函数的指针数组的指针

如何解决指向函数的指针数组的指针

假设我有一个功能

int foo(void)
{
    printf("Hello world");
}

我想使用一个指向函数的指针来指向foo()

typedef int (*f_ptr)(void);

我会使用其中哪一种情况?

(A) f_ptr my_ptr = foo;
    my_ptr();

(B) f_ptr * my_ptr = foo;
    my_ptr();

现在,如果我有10个函数foo1(),foo2() .. foo10(),并且想将它们放在数组中并使用指向函数的指针遍历该数组,该怎么办?

f_ptr my_functions[10] =
{
    foo1,foo2,..
    foo10,};

(A) f_ptr my_ptr = my_functions;   
(B) f_ptr * my_ptr = my_functions;

    for (int x = 0; x < 10; x++)
    {
        my_ptr();
        my_ptr++;
    }

解决方法

对于初学者,请注意此功能

int foo(void)
{
    printf("Hello world");
}

具有返回类型int,不返回任何内容。相反,您可以编写示例

int foo(void)
{
    return printf("Hello world");
}

尽管如此,在表达式中使用的带有极少数异常的数组指示符会转换为指向其第一个元素的指针。

因此,如果数组的元素类型为

f_ptr my_functions[10];

f_ptr,则指向数组元素的指针看起来像

f_ptr * my_ptr = my_functions;

例如,您可以使用类似

的指针编写循环
for ( size_t i = 0; i < 10; i++ )
{
    my_ptr[i]();
}

for ( f_ptr *my_ptr = my_functions; my_ptr != my_functions + 10; ++my_ptr )
{
    ( *my_ptr )();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。