[英]How to initialize to NULL a 2D array of pointer structs in C?
我有以下结构:
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-括号]
将每个元素初始化为NULL
的正确方法是什么?
如果我做到了:
static HSM_Transition_T Transition_Table_Array_Test[3][3] = {{NULL}};
我犯了同样的错误。
static HSM_Transition_T* Transition_Table_Array_Test[3][3]={{NULL}};
NULL应该与没有结构的指针一起使用。
如果要在二维结构数组中初始化结构字段,则
static HSM_Transition_T Transition_Table_Array_Test[3][3]={{{NULL,NULL,NULL}}};
您收到警告的原因是因为NULL
是基元,但是数组的元素是集合; 它们需要使用聚合变量(正确类型)或第三个括号表达式(就地构造聚合)进行初始化。
数组的类型不允许使用NULL
来初始化元素,因为结构值不能为NULL
,只能是指针。 结构是就地存在的,因此它们不可能在数组中“不存在”(数组的元素是结构;如果数组存在,那么它们也是如此)。
编译器抱怨括号仍然下落不明,而不是告诉你一个结构值不能为NULL
,因为它认为你想在内部的函数指针初始化HSM_Transition_T
以NULL
(这是一个操作将使意义)。
你可以写:
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}};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.