C-此函数指针声明是什么意思?

杰米·古格

我正在分析一些多线程代码。在初始化函数中,有一段代码如下:

for(i=0;i<MAX_STREAMS;i++){
    cmdStreamTaskPtr[i] = NULL;
}

我了解该语法,但是我的问题出在的声明中cmdStreamTaskPtr它是通过以下方式定义的,其中cmdData_tatypedef structMAX_STREAMS5。

static cmdData_t *(*cmdStreamTaskPtr[MAX_STREAMS])(void) = {[0 ... MAX_STREAMS-1] = NULL};

我不知道这行是什么意思。它是具有默认值的变量吗?

dbush

cmdStreamTaskPtr 是一个数组:

cmdStreamTaskPtr[MAX_STREAMS]

指针:

*cmdStreamTaskPtr[MAX_STREAMS]

要不接受任何参数的函数:

(*cmdStreamTaskPtr[MAX_STREAMS])(void)

并返回一个cmdData_t *

cmdData_t *(*cmdStreamTaskPtr[MAX_STREAMS])(void)

并且是static

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将为指向不带任何参数并返回的函数的指针提供一个typedef cmdData_t *然后可以将数组定义更改为:

static fp cmdStreamTaskPtr[MAX_STREAMS];

因此,现在应该更加清楚的cmdStreamTaskPtr是的数组fp,其中anfp是先前定义的函数指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C-此逗号分隔的声明是什么意思

这个C函数声明是什么意思?

在 c 函数中 ... 是什么意思

指向函数成员的指针:R(* C :: *)(Args ...)是什么意思?

C指针的“ **&ptr”和“ 2 ** ptr”是什么意思?

c中的“无效声明”是什么意思?

这个复杂的 C 类型声明是什么意思?

Objective-C:此代码是什么意思?

-c是什么意思?

在C语言中调用函数时\是什么意思?

{}在这些c ++函数中是什么意思?

C ++,构造函数后的冒号是什么意思?

c++函数接口单冒号是什么意思

C#函数参数包含“ = null”是什么意思?

在C中,函数名前面的*是什么意思?

“错误:非空函数未在所有控制路径中返回值”是什么意思。或“错误:使用未声明的标识符'sum'”在c中是什么意思?

这个 C 指针错误是什么意思?为什么会这样

C:夹板指针相关的警告。他们是什么意思?

这个类型结构定义的指针是什么意思(在C中)?

在C ++中,变量声明左侧的花括号是什么意思?

“带括号的声明符”在C语法中是什么意思

'<> c。<> 9'是什么意思?我找不到它们的声明,它们来自哪里?

此Objective-C属性综合警告是什么意思?

:: *在C ++中是什么意思?

char*** 在 C 中是什么意思?

**在C中是什么意思?

在C ++中'return * this'是什么意思?

在C ++中,^(){}和^ {}是什么意思?

C中的“ ^ L”是什么意思?