簡體   English   中英

如何將C中的指針結構的2D數組初始化為NULL?

[英]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_TNULL (這是一個操作將使意義)。

你可以寫:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM