Динамический массив целых или нет? - PullRequest
0 голосов
/ 31 марта 2011

Если я создаю структуру в одном классе, то так

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

} CollisionLayer;

возможно ли создать массив целых чисел с пустым [] и задать размер при создании? Или как этот массив будет создан? динамически с указателем? Я буду знать размер массива при создании одного из этих структурных «объектов», если возможно заполнить размер массива при создании, как массив объявляется в приведенной выше структуре?

Ответы [ 4 ]

3 голосов
/ 31 марта 2011

Вам нужно будет инициализировать массив самостоятельно:

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;

Конечно, это будет менее желательно во всех отношениях, но это единственный вариант, если вы не хотите управлять памятью вручную.

2 голосов
/ 31 марта 2011

Если вы не знаете размер во время компиляции, то вы должны выделить память с помощью malloc () во время выполнения. Чтобы использовать фактический массив в C, вы должны знать размер при компиляции кода.

1 голос
/ 31 марта 2011

VLA не могут быть членами структур, поэтому вам нужно будет выделить память с malloc при создании объекта struct.

1 голос
/ 31 марта 2011

tileArray - указатель на int.malloc / calloc должен использоваться для создания объекта, на который он будет указывать.Это должно происходить при создании объекта CollisionLayer.

Определение структуры, в которой массив [] пуст, не является хорошей идеей, обратитесь к this .Он говорит о C ++, но он должен применяться и к Си.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...