如果我在一个类中创建一个结构
typedef struct
{
int numberOfTiles;
// an array of ints here
int *tileArray;
} CollisionLayer;
是否可以使用空[]创建一个int数组并在创建时设置大小?或者如何创建这个数组?用指针动态?在创建其中一个struct“对象”时我会知道数组的大小,如果可以在创建时填充数组的大小,那么在上面的结构中如何声明数组?
答案 0 :(得分:3)
您需要自己初始化阵列:
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;
当然,这在所有方面都不太理想,但如果您不想手动管理内存,这是您唯一的选择。
答案 1 :(得分:2)
如果在编译时不知道大小,则必须在运行时使用malloc()分配内存。要在C中使用实际数组,必须知道编译代码时的大小。
答案 2 :(得分:1)
tileArray是指向int的指针。 malloc / calloc应该用于创建它将指向的对象。创建CollisionLayer的对象时会发生这种情况。
定义array []为空的结构不是一个好主意,请参考this。它讲的是C ++,它也应该适用于C语言。
答案 3 :(得分:1)
VLA不能是结构的成员,因此在创建结构对象时需要使用malloc
分配内存。