我知道如何在函数内创建结构数组:
typedef struct item
{
int test;
};
void func (void)
{
int arraysize = 5;
item ar[arraysize];
}
但是,如果全局声明数组,我该怎么做?
typedef struct item
{
int test;
};
item ar[];
void func (void)
{
int arraysize = 5;
// What to here?
}
答案 0 :(得分:3)
对于具有自动存储持续时间的阵列,只允许在C中使用可变长度数组。在文件范围声明的数组具有静态存储持续时间,因此不能是可变长度数组。
您可以使用malloc
为编译时大小未知的数组对象动态分配内存。
答案 1 :(得分:1)
你可能喜欢这个:
typedef struct item
{
int test;
};
item *arr;
void func (void)
{
int arraysize = 5;
arr = calloc(arraysize,sizeof(item));
// check if arr!=NULL : allocation fail!
// do your work
free(arr);
}
但它的动态分配!
如果在编译时知道arraysize
。然后更好地创建一个像这样的宏:
#define arraysize 5
typedef struct item
{
int test;
};
item arr[arraysize];
对于宏常量使用大写的侧注是好习惯
答案 2 :(得分:1)
item * ar:
int count;
void foo()
{
count = 5;
ar = malloc(sizeof(item) * count);
// check to make sure it is not null...
}
答案 3 :(得分:1)
typedef struct item
{
int test;
};
#define ARRAYSIZE 5
item ar[ARRAYSIZE];
答案 4 :(得分:0)
您无法在运行时修改数组的大小。您可以执行动态内存分配,并在需要时调用realloc()
。
编辑:在您的情况下,我建议做一些像这样的事情:
item *ar;
void func(void)
{
int arraysize = 5;
ar = malloc(arsize);
if(ar) {
/* do something */
}
//don't forget to free(ar) when no longer needed
}