簡體   English   中英

存儲動態結構數組

[英]Storing a Dynamic Array of Structures

我一直在研究一個利用動態結構數組的項目。 為了避免將結構數存儲在其自己的變量(結構數)中,我一直在使用指向帶有NULL終止符的結構變量的指針數組。

例如,假設我的結構類型定義為:

typedef struct structure_item{
    /* ... Structure Variables Here ... */
} item_t;

現在,假設我的代碼具有item_t **allItems = { item_1, item_2, item_3, ..., item_n, NULL }; 並且所有item_#的類型item_t *

然后,使用此設置,我不必跟蹤另一個告訴我項目總數的變量。 相反,我可以這樣說來確定所需的項目總數:

int numberOfStructures;
for( numberOfStructures = 0;
     *(allItems + numberOfStructures) != NULL;
     numberOfStructures++
  );

執行此代碼時,它將計算NULL之前的指針總數。

相比之下,該系統類似於C風格的字符串。 而跟蹤結構的總數將類似於Pascal樣式的字符串。 (因為C使用以NULL結尾的字符數組,而Pascal跟蹤其字符數組的長度。)

我的問題很簡單,是真的需要一個指針數組(指向struct的指針)還是可以通過一個struct數組來實現(指向struct的指針)? 有人可以提供更好的方法來解決此問題嗎?

注意:該解決方案必須與C C ++兼容,這一點很重要。 包裝庫正在使用此庫,該包裝庫將C ++庫包裝為在標准C中使用。

謝謝大家!

您需要的是哨兵值 ,這是一個可識別的有效值,表示“無”。 對於指針,標准哨兵值為NULL

如果要直接使用結構,則需要確定item_t類型的哨兵值並進行檢查。 您的來電。

是的,可能有一個結構體數組,(至少)有一個已定義的標記(在字符串末尾使用'\\ 0',在您的情況下為NULL指針)。

對於您的結構類型,您需要做的是保留該結構的一個或多個可能值(由其成員的值組成)以指示標記。

例如,假設我們有一個struct類型

struct X {int a; char *p};

然后定義一個函數

int is_sentinel(struct X x)
{
    return x.p == NULL;
}

這將意味着成員p為NULL的任何結構X都可以用作標記(在這種情況下成員a無關緊要)。

然后循環尋找哨兵。

注意:要在C和C ++中都兼容,結構類型必須兼容(例如POD)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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