如何在C中更改数组的大小?

时间:2010-09-30 05:04:59

标签: c arrays resize size arraylist

我正在尝试使用gamestudio。 我现在正在拍摄射击游戏。 我有一个指针指向敌人的阵列。我想要。当敌人被杀时将他从列表中删除。而且我也想创造新的敌人。

Gamestudio使用名为lite-C的脚本语言。它具有与C相同的语法,并且在他们说的网站上,它可以使用任何C编译器进行编译。它是纯C,没有C ++或其他任何东西。

我是C的新手。我通常使用.NET语言和一些脚本语言进行编程,

6 个答案:

答案 0 :(得分:24)

你做不到。这通常通过动态内存分配来完成。

// 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);

答案 1 :(得分:3)

数组是静态的,因此您将无法更改其大小。您需要创建链接列表数据结构。该列表可以根据需求增长和缩小。

答案 2 :(得分:1)

一旦创建了C中的数组,就会设置它。您需要动态数据结构,如链接列表或ArrayList

答案 3 :(得分:0)

看一下realloc,它将允许你调整给定指针指向的内存(在C中,数组是指针)。

答案 4 :(得分:0)

正如NickTFried所说,Linked List是一种可行的方式。 另一个是拥有一张足够大的桌子来容纳你所拥有的最大数量的物品并管理它们(哪些是有效的或无效的,目前列表中有多少敌人)。

就调整大小而言,你必须使用指针代替表格,你可以重新分配,复制等等......绝对不是你想在游戏中做的事情。

如果性能是一个问题(我猜它是),那么正确分配的表可能就是我要使用的。

答案 5 :(得分:0)

我想减小数组的大小,但是没有像这样工作:

myArray = new int[10];//Or so.

所以我尝试创建一个新文件,其大小基于保存的计数。

int count = 0;

for (int i = 0; i < sizeof(array1)/sizeof(array1[0]); i++){
  if (array1[i] > 0) count++;
}

int positives[count];

然后重新传递第一个数组中的元素以将它们添加到新数组中。

//Create the new array element reference.

int x = 0;

for (int i = 0; i < sizeof(array1)/sizeof(array1[0]); i++){
  if (array1[i] > 0){ positives[x] = array1[i]; x++; }
}

在这里,我们有了一个全新的数组,其中包含我们想要的元素的确切数量(以我为例)。