在C中初始化具有未知大小的数组

时间:2015-03-05 14:46:23

标签: c arrays

我有这段代码:

#include <stdio.h>

int average(int array []);

int main () {

int num_array[];


int x = 0;

  while(num_array[x] != -1){

     printf("Enter a number\n");
     scanf("%d",&num_array[x]);

     x++;

  }

  printf("%d\n", average(num_array));

  return 0;
}



int average(int array[]){

  int i;
  int total_size = (int)sizeof(array);
  int sum = 0;

  for(i = 0; i < total_size; i++){

    sum = sum + array[i];

  }

  return sum/total_size;

}

但是我在编译时遇到错误,因为我没有初始化数组。但是我无法做到,因为我不知道它的大小。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您无法声明类似

的数组
int num_array[];  

在C中,除非它是函数的参数。您必须指定大小。

答案 1 :(得分:1)

除非您使用的是数组库,否则这在C中实际上是一个非常棘手的问题。你实际谈论的是一个可成长的数组。对于您要尝试的操作,您可以使用malloc()以初始大小(例如10)开始,随着输入增长,您必须将realloc()数组调整为更大的大小。通常,每次达到限制时,都会使数组的大小加倍。如果你是一个初学的C程序员,这可能太过分了。我会设置一个固定限制,并在限制被触发后不再接受任何输入来强制执行它。鉴于你可以轻松地分配1000个int并且人类不想输入那么多,你可以提前做出实际限制并声明数组:

int num_array[1000];

答案 2 :(得分:0)

您需要在此处提供数组的大小:int num_array[];

如果您使用的是未知大小的结构,您可以:

  • 询问用户将输入多少个数字(不太实际,但如果您的案例很简单,则可能就足够了。)

  • 使用默认大小初始化它,例如10,然后如果需要,创建更大的数组并将当前数据复制到新数组。

  • 或者,您使用数据结构之类的链接列表并随着时间创建新元素,从而使您的列表能够根据需要增长。