簡體   English   中英

是否動態設置整數?

[英]Dynamic array of ints or not?

如果我這樣在一個類中創建一個結構

typedef struct
{     
    int numberOfTiles;
    // an array of ints here
    int *tileArray; 

} CollisionLayer;

是否可以創建帶有空[]的整數數組並在創建時設置大小? 或將如何創建此數組? 用指針動態地? 當創建這些結構“對象”之一時,我將知道數組的大小,如果可以在創建時填寫數組的大小,那么在上面的結構中如何聲明數組?

您將需要自己初始化數組:

CollisionLayer layer;
layer.numberOfTiles = numberOfTiles;
layer.tileArray = (int*)malloc(sizeof(int) * numberOfTiles);

或者,如果要在堆上創建結構:

CollisionLayer* pl  = (CollisionLayer*)malloc(sizeof(CollisionLayer));
pl->numberOfTiles = numberOfTiles;
pl->tileArray = (int*)malloc(sizeof(int) * numberOfTiles);

// When you are done:
free(pl->tileArray);
free(pl);

另一種選擇是將固定大小限制硬編碼到CollisionLayer ,例如:

typedef struct
{     
    int numberOfTiles;
    // an array of ints here
    int tileArray[100]; 

} CollisionLayer;

當然,在所有方面都不太理想,但是如果您不想手動管理內存,這是您唯一的選擇。

如果在編譯時不知道大小,則必須在運行時使用malloc()分配內存。 要在C語言中使用實際數組,必須在編譯代碼時知道大小。

tileArray是一個指向int的指針。 應該使用malloc / calloc創建它將指向的對象。 創建CollisionLayer對象時,應該會發生這種情況。

定義一個數組[]為空的結構不是一個好主意,請參考this 它說的是C ++,它也應該適用於C。

VLA不能是結構的成員,因此創建結構對象時,需要使用malloc分配內存。

暫無
暫無

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

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