2

我知道如何在函数中创建结构数组:

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?
}
4

5 回答 5

3

可变长度数组只允许在 C 中用于具有自动存储持续时间的数组。在文件范围内声明的数组具有静态存储持续时间,因此不能是可变长度数组。

您可以使用malloc它为编译时大小未知的数组对象动态分配内存。

于 2013-01-12T17:19:54.200 回答
2
item * ar:
int count;

void foo()
{
    count = 5;
    ar = malloc(sizeof(item) * count);
    // check to make sure it is not null...
}
于 2013-01-12T17:22:49.313 回答
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];  

旁注使用大写的宏常量是一个很好的做法

于 2013-01-12T17:21:01.217 回答
1
typedef struct item 
{
    int test; 
};

#define ARRAYSIZE 5

item ar[ARRAYSIZE];
于 2013-01-12T17:25:08.517 回答
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
    }
于 2013-01-12T17:18:59.200 回答