❝本文介绍如何遍历函数指针数组的方法。❞
在一个u-boot源码中看到,分享给大家。利用函数指针数组最后的空指针作为判断结束。
- 函数指针数组定义:
代码语言:javascript
复制
typedef int (init_fnc_t) (void);
init_fnc_t *init_sequence[] =
{
...
env_init, /* initialize environment */
init_baudrate, /* initialze baudrate settings */
serial_init, /* serial communications setup */
console_init_f, /* stage 1 init of console */
display_banner, /* say that we are here */
display_inner, /* show the inner version */
print_commit_log,
script_init,
smc_init,
init_func_pmubus,
power_source_init,
check_update_key,
check_uart_input,
dram_init, /* configure available RAM banks */
NULL, /* 数组的结束标志 */
};
- 使用(在u-boot中作用是顺序初始化):
代码语言:javascript
复制
init_fnc_t **init_fnc_ptr;
/* 遍历调用 */
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
...
}
}
- 似曾相识的用法(字符串的结束符):
代码语言:javascript
复制
char string[]={'h', 'e', 'l', 'l', 'o', '\0'};
「那么问题来了?为什么不使用sizeof计算数组长度的方法遍历呢?在留言区评论他们为什么会这样做吧。」