Подтвердить что ты не робот

Как изменить размер массива в C?

Я немного экспериментирую с gamestudio. Сейчас я делаю шутер. У меня есть массив с указателем на врагов. Я хочу. когда убит враг. удалите его из списка. И я также хочу иметь возможность создавать новых врагов.

В Gamestudio используется язык сценариев с именем lite-C. Он имеет тот же синтаксис, что и C, и на веб-сайте, который они говорят, что он может быть скомпилирован с любым компилятором C. Это чистый C, не С++ или что-то еще.

Я новичок в C. Обычно я программирую на языках .NET и некоторых языках сценариев,

4b9b3361

Ответ 1

Как только массив в C был создан, он установлен. Вам нужна динамическая структура данных, такая как Linked List или ArrayList

Ответ 2

Вы не можете. Обычно это выполняется с динамическим распределением памяти.

// Like "ENEMY enemies[100]", but from the heap
ENEMY* enemies = malloc(100 * sizeof(ENEMY));
if (!enemies) { error handling }

// You can index pointers just like arrays.
enemies[0] = CreateEnemy();

// Make the array bigger
ENEMY* more_enemies = realloc(enemies, 200 * sizeof(ENEMY));
if (!more_enemies) { error handling }
enemies = more_enemies;

// Clean up when you're done.
free(enemies);

Ответ 3

Массивы являются статическими, поэтому вы не сможете изменить его размер. Вам нужно будет создать структуру данных связанного списка. Список может расти и сокращаться по требованию.

Ответ 4

Взгляните на realloc, который позволит вам изменить размер памяти, на которую указывает данный указатель (который в массивах C является указателем).

Ответ 5

Как сказал NickTFried, Linked List - это один из способов. Еще один - иметь таблицу, достаточно большую, чтобы удерживать максимальное количество элементов, которые вы когда-либо имели, и управлять ими (какие из них действительны или нет, сколько противников в настоящее время в списке).

Что касается изменения размера, вам придется использовать указатель вместо таблицы, и вы можете перераспределять, копировать и т.д.... определенно не то, что вы хотите сделать в игре.

Если производительность является проблемой (и я предполагаю, что это так), правильно распределенная таблица, вероятно, я буду использовать.