cmdStreamTaskPtr
是一个数组:
cmdStreamTaskPtr[MAX_STREAMS]
指针:
*cmdStreamTaskPtr[MAX_STREAMS]
对于不接受任何参数的函数:
(*cmdStreamTaskPtr[MAX_STREAMS])(void)
并返回一个cmdData_t *
:
cmdData_t *(*cmdStreamTaskPtr[MAX_STREAMS])(void)
而且是静态
的:
static cmdData_t *(*cmdStreamTaskPtr[MAX_STREAMS])(void)
数组的所有元素都使用NULL
进行初始化:
static cmdData_t *(*cmdStreamTaskPtr[MAX_STREAMS])(void) = {[0 ... MAX_STREAMS-1] = NULL}
注意,初始化语法
[0 ... MAX_STREAMS-1]
不是标准的C语言,而是GCC支持的扩展功能。在这种情况下,这也是多余的,因为数组已被声明为
static
,这意味着它具有静态存储期限,因此如果没有明确初始化,其元素会隐式地初始化为
NULL
。
使用函数指针可以通过
typedef
更清晰地表达。在这种情况下,我们可以创建以下 typedef:
typedef cmdData_t *(*fp)(void);
这使得fp
成为一个指向不带参数并返回cmdData_t *
的函数指针。数组定义可以更改为:
static fp cmdStreamTaskPtr[MAX_STREAMS];
现在应该更清楚了,cmdStreamTaskPtr
是fp
数组,其中fp
是之前定义的函数指针。