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 \n",__FUNCTION__,__LINE__);
return 0;
}
int fun2(void)
{
printf("%s,%d \n",__FUNCTION__,__LINE__);
return 0;
}
int fun3(void)
{
printf("%s,%d \n",__FUNCTION__,__LINE__);
return 1;
}
int fun4(void)
{
printf("%s,%d \n",__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 \n",__FUNCTION__,__LINE__);
#if 1
if ((*init_fnc_ptr)() != 0)
{
printf("%s,%d \n",__FUNCTION__,__LINE__);
}
#endif
}
}