簡體   English   中英

C語言中的struct的指針數組

[英]Array of pointers to struct in C

我的c代碼中有一個約300Bytes(5xint + 256chars)的結構,並且我希望有一個很好的數組機制來處理該結構的所有“對象”。 我想要一個全局的指針數組,這樣一來數組中的所有索引都指向NULL,但是當我需要它時,我會初始化每個索引(malloc),在我完成它時將其刪除(免費)。

typedef struct myfiles mf;
mf* myArr[1000];

我在找什么嗎? 指針與數組混合經常使我感到困惑。 如果是這樣,只是為了澄清一下,

mf myArr[1000];

已經在堆棧上分配了1000個結構,而我的第一個建議僅分配了1000個指針?

你是對的。 前者分配1000個指針,沒有一個被初始化,后者則初始化1000個每個〜300字節的對象。

foo_t* foo[1000] = {NULL};為null: foo_t* foo[1000] = {NULL};

但這仍然很愚蠢。 為什么不只是mf* myArr = NULL 現在,您有一個指向未初始化內存的指針,而不是1000個指向初始化內存的指針,還有一個指針可以跟蹤。 你願意嗎

myArraySingle = malloc(sizeof(mf)*1000); 要么

for(int i = 0; i < 1000; i++) {
    myArray[i] = malloc(1000);
}

並通過myArraySingle[300]或*(myArray [300])`訪問? 無論如何,除了語法之外,不要創建這種不必要的間接尋址。 單個指針可以指向包含一系列對象的連續內存,就像數組一樣,這就是為什么指針支持數組樣式語法以及為什么數組索引從0開始的原因。

typedef struct myfiles mf;
mf* myArr[1000];

這就是您要尋找的。 這將為結構mf分配1000個指針的數組。

您似乎理解正確。

更准確地說,我相信mf* myArr[1000] = { 0 }; 會更好地滿足您的要求,因為您希望保證所有元素都將初始化為空指針。 沒有初始化,這種保證就不存在。

C中沒有“全局”。您指的是具有靜態存儲持續時間的對象,在文件作用域聲明。

typedef struct myfiles mf;
mf* myArr[1000];

是的,它將初始化1000個指針,使用前必須使用malloc / calloc為每個指針分配內存。

暫無
暫無

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

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