c中未知数量的元素的数组

时间:2015-05-16 20:31:37

标签: c arrays variables size

我试图用C制作游戏,我的问题是: 我需要在C中使用某种方法,它基本上可以解释这个python代码的作用:

array = list();
len(array)       #returns 0
x = 1
array.append(x)
len(array)       #returns 1
array.append(2)
len(array)       #returns 2

这只是我需要做的基本方法,如果它小于5的测试就是不同大小的数组,原来我的问题是如何操纵游戏中的枪声,创建它们按键盘上的空格(将枪声附加到现在为空的数组),然后我必须做这样的事情,就在C:

for i in range(len(array)):
    print array[i]

最初,当循环运行时我必须确定枪声是否可见并且是否可以移动,我不知道如何在C中确定阵列的长度,特别是如果数组具有可变大小(可以及时增加大小) 在Python中,处理这个很容易,但是我不知道如何在C中完成它,因为我的游戏必须在C'因为它适合大学课程。

4 个答案:

答案 0 :(得分:2)

我建议使用链表而不是数组,因为您最终会想要删除任意元素。 (子弹1仍在屏幕上移动,但是子弹3击中墙壁,子弹6击中敌人。)您可以直接在子弹结构中执行此操作,而不是作为单独的数据结构:

typedef struct bullet_t {
  /* ...game logic... */
  struct bullet_t* next;
} bullet;

答案 1 :(得分:1)

C不支持可变大小的数组;如果C ++是一个选项,请转到std::vector。如果没有,您将必须自己在C中实现它。我个人建议做一些接近于std::vector的事情 - 每次内存耗尽时,realloc两倍。

答案 2 :(得分:0)

有不同的方法可以做你想做的事,但我建议链式列表。 基本上,将python代码转换为C代码的问题在于,您必须在大多数时间手动分配变量,并且在此处。所以你可以做一个链式列表,你用malloc分配每个新元素,然后用指针将它链接到列表的其余部分。

然后,要知道大小,只需使用计数器跟随列表。

祝你好运。 ;)

答案 3 :(得分:0)

我会推荐一个不同的ADT。例如一个链接列表,或Set ADTs(如果你稍微谷歌,你可能会找到完成的)。但是,如果您绝对需要使用数组,那么您应该查找动态分配的数组。这是一个实现示例。 (未经测试)

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int *array;
    int size;
    int capacity;
} array_t;

#define ARRAY_INIT_CAPACITY 4

array_t *new_array(){
    array_t *arr=malloc(sizeof(array_t));
    arr->array=malloc(sizeof(int)*ARRAY_INIT_CAPACITY);
    arr->size=0;
    arr->capacity=ARRAY_INIT_CAPACITY;
    return arr;
}

void increase_array(array_t *array){
    int new_capacity=array->capacity*2;
    int *new_location = realloc(array->array, new_capacity*sizeof(int));
    if (!new_location) {
        fprintf(stderr, "Out of memory");
        exit(1);
    }
    array->capacity=new_capacity;
    array->array=new_location;
}

void array_append(array_t *array, int item){
    if (array->size >= array->capacity){
        increase_array(array);
    }
    array->array[array->size]=item;
    array->size+=1;
}
int array_size(array_t *array){
    return array->size;
}
array_t *myArray=new_array();

我建议您了解dynamic memory allocationArrays in C。 希望它有所帮助:)