如何在C中将指针结构的2D数组初始化为NULL?

时间:2015-05-19 15:45:56

标签: c arrays struct

我有以下结构:

typedef void (*HSM_State_Fcn)(void*, size_t);
typedef HSM_State_Fcn HSM_Dest_State_Fcn;
typedef uint8_t (*HSM_Guard_Fcn)(void*, size_t);
typedef void (*HSM_Action_Fcn)(void*, size_t);

typedef struct HSM_Transition_Tag
{
    HSM_Dest_State_Fcn dest_fcn;
    HSM_Guard_Fcn      guard_fcn;
    HSM_Action_Fcn     action_fcn;
}HSM_Transition_T;

我有以下2D数组,我希望每个元素都是NULL

static HSM_Transition_T Transition_Table_Array_Test[3][3] = {NULL};

如你所见,我试图等于{NULL},但我收到以下警告:

警告:(接近初始化'Transition_Table_Array_Test [0]')[-Wmissing-braces]

将每个元素初始化为NULL的正确方法是什么?

如果我成功:

static HSM_Transition_T Transition_Table_Array_Test[3][3] = {{NULL}};

我得到了同样的错误。

3 个答案:

答案 0 :(得分:2)

$( "#someId" ).typeahead( { ... }, {..., limit: 10, ...});

NULL应该与指针而不是结构一起使用。

如果要在2d结构数组中初始化struct字段,那么

static HSM_Transition_T* Transition_Table_Array_Test[3][3]={{NULL}};

答案 1 :(得分:2)

您收到警告的原因是因为NULL是基元,但数组的元素是聚合;它们需要使用聚合变量(正确类型)初始化,或者使用还有第三个支撑表达式(在适当位置构建聚合)。

数组的类型不允许使用NULL初始化元素,因为结构值不能是NULL,只能是指针。结构就地存在,因此它们不可能从数组“缺席”(数组的元素 结构;如果数组存在,那么它们也是如此)。

编译器抱怨大括号仍然缺失,而不是告诉你结构值不能是NULL,因为它认为你正在尝试初始化中的函数指针 { {1}}到HSM_Transition_T(这是一项有意义的操作)。

答案 2 :(得分:1)

你可以写:

static HSM_Transition_T Transition_Table_Array_Test[3][3] = {
    {NULL, NULL, NULL},
    {NULL, NULL, NULL},
    {NULL, NULL, NULL}};

但NULL主要用于指针而不是struct。

你会写的(注意Transition_Table_Array_Test之前的'*':

static HSM_Transition_T *Transition_Table_Array_Test[3][3] = {
    {NULL, NULL, NULL},
    {NULL, NULL, NULL},
    {NULL, NULL, NULL}};