[英]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.