结构,数组为c中的变量

时间:2011-09-17 08:42:16

标签: c arrays variables struct declare

我需要创建一个数据类型(本例中为struct),并将数组作为属性。我有一个初始化函数,初始化此数据结构并为数组提供指定的大小。现在的问题是在结构中声明数组。例如“int values []”将要求我在括号中输入数字,例如值[256]。应该在结构初始化时指定Th3 256。有没有办法绕过这个?

typedef struct 
{
        int values[];      //error here
        int numOfValues;
} Queue;

3 个答案:

答案 0 :(得分:16)

结构必须具有在编译时已知的固定大小。如果你想要一个长度可变的数组,你必须动态分配内存。

typedef struct {
    int *values;
    int numOfValues;
} Queue;

这样,只有指针存储在结构中。在struct的初始化中,将指针指向一个用malloc:

分配的内存区域
Queue q;
q.numOfValues = 256;
q.values = malloc(256 * sizeof(int));

请记住,只要不再使用,就检查NULL指针的返回值和free()任何动态分配的内存。

答案 1 :(得分:9)

#include<stdio.h> 
#include<stdlib.h>
typedef struct Queue {
int numOfValues;
int values[0]; 
} Queue_t;

int main(int argc, char **argv) {
Queue_t *queue = malloc(sizeof(Queue_t) + 256*sizeof(int));
return (1);
}

这样你就可以声明'可变长度数组'。您可以使用queue-&gt; values [index]

访问数组'values'

编辑:当然你需要确保一旦你自由,你考虑到你已经分配的'n * sizeof(int)'和sizeof(Queue_t),其中n = 256在上面的例子中 HTH

答案 2 :(得分:3)

您可以使用像VLA这样的C99功能,例如

int main()
{
  int len=1234;
  struct MyStruct {int i,array[len];} var;

  var.array[0]=-1;
  var.array[len-1]=1;

  printf( "%i %i %lu", var.array[0],var.array[len-1],(unsigned long)sizeof(var) );

  return 0;
}