uboot 二重指针 init_fnc_t ** init_fnc_ptr

昨晚看老朱的视频,老朱说不懂二重指针来看他这个uboot的视频是狗看星星。

当时心里虚的一逼,自己第一看确实没看懂,赶快百度看了下,在源码中把这个单独提出来练习了下。

linux 下编译。

具体代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef int (init_fnc_t) (void);  // 函数类型定义 返回值为int 参数为 void 命名为 init_fnc_t

 // 定义满足类型的函数 fun1---fun4
int fun1(void)  
{
    printf("%s,%d ",__FUNCTION__,__LINE__);
    return 0;
}

int fun2(void)
{
    printf("%s,%d ",__FUNCTION__,__LINE__);
    return 0;
}

int fun3(void)
{
    printf("%s,%d ",__FUNCTION__,__LINE__);
    return 1;
}

int fun4(void)
{
    printf("%s,%d ",__FUNCTION__,__LINE__);
    return 1;
}

// 定义满足函数类型的数组
init_fnc_t *init_sequence[] = {
    fun1,
    fun2,        
    fun3,
    fun4,
    NULL,
};

int main()
{
    init_fnc_t ** init_fnc_ptr;

 // 通过二重指针来遍历数组
    for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)
    {
        printf("%s,%d ",__FUNCTION__,__LINE__);
        #if 1
        if ((*init_fnc_ptr)() != 0)
        {
            printf("%s,%d ",__FUNCTION__,__LINE__);
        }
        #endif
    }
}

原文地址:https://www.cnblogs.com/zhangjianrong/p/15217623.html