声明后更改struct的大小

时间:2015-06-30 00:24:22

标签: c arrays struct resize size

我有一个代码包含这个结构

struct mystruct{
  int a;
  int array[1];
};

直接运行代码后 我的意思是我不会声明该结构的任何变量,用户将输入一个数字,例如6。 我想知道如何改变结构的大小。

就像我在这张表格上声明的那样

struct mystruct{
  int a;
  int array[6];
};

然后我正常使用,像这样:

struct mystruct var;
//I do not want to add any code here, to appropriate new form
for(int i=0;i<6;i++)
  var.array[i]=0;

3 个答案:

答案 0 :(得分:1)

在直接C(而不是C ++)中执行此类操作的典型方法是在结构中只指向一个指针成员,指向数组,然后指向结构的另一个成员以指示大小。这通常要求struct的用户根据需要malloc()数组,并且还要将size成员设置为匹配。类似的东西:

struct mystruct
{
  int size;
  int *array;
};

struct mystruct var;
var.array = malloc(6 * sizeof(int));
var.size = 6;

for (int i = 0; i < var.size; i++)
    var.array[i] = 0;

另一个常见的范例是linked list

当然,在C ++中你可以使用std::vector<int>

答案 1 :(得分:0)

您无法更改已声明的结构,但您可以通过修改程序来创建新的结构。在程序运行时,您无法动态更改程序中使用的数据结构。

答案 2 :(得分:0)

您不能更改结构的声明,但如果它是结构中的可变长度数组,您希望有一个选项。将结构声明为:

struct mystruct{
  int a;
  int array[0];
};

然后,当您想要在数组中创建具有n元素的实例时,请执行以下操作:

struct mystruct *a = malloc(sizeof(struct mystruct) + n * sizeof(int));

这将创建一个足以容纳结构的内存区域和一个长度为n的数组。然后,您可以像使用任何其他数组一样使用数组:

a->array[1] = 5;

(此示例假定数组至少包含2个元素)

要完成代码示例中的内容,您需要执行以下操作:

struct mystruct *var = malloc(sizeof(struct mystruct) + 6 * sizeof(int));
for(int i=0;i<6;i++) {
  var->array[i]=0;
}