当数组大小和整数大小不恒定时,如何创建一个int数组?

时间:2015-04-17 16:45:08

标签: c arrays

我需要创建一个整数数组,目的是在程序中逐个使用它们。整数由用户输入,因此数组的大小和每个整数的大小不是恒定的。我可以说,由于程序的规范,阵列不会超过,比如说, 100个元素,整数总是介于0到99之间 。我怎样才能做到这一点?我是C的新手,这对我来说真是令人困惑,因为这在Python中很容易做到,而且我已经花了很长时间才试图弄清楚如何使这项工作(我明白所有这些并发症)数组来自于C是一种古老的语言。

1 个答案:

答案 0 :(得分:1)

首先,不要将整数与用于表示它的类型的大小混淆。在您使用的任何整数类型中,值099将占用完全相同的空间量。

对于阵列本身,您有几种选择。

您可以选择最多允许用户超过的元素数量:

#define MAX_ALLOWED 100

int main( void )
{
  int values[MAX_ALLOWED];  // declare array with max-allowed values
  size_t howMany;

  // get howMany from user, make sure it doesn't exceed MAX_ALLOWED
  ...
}

如果您使用支持可变长度数组的C99或C2011编译器,您可以从用户获取数组长度并在数组中使用该值 声明:

int main( void )
{
  size_t howMany;

  // get howMany from user

  int values[howMany];  // declare array with user-specified number of values
  ...
}

如果您不想使用VLA(并且有一些很好的理由不这样做),您可以使用动态内存管理例程:

#include <stdlib.h>

int main( void )
{
  size_t howMany;

  // get howMany from user

  int *values = malloc( howMany * sizeof *values );  // dynamically allocate
                                                     // space to store user-
                                                     // specified number of
                                                     // values.
  if ( !values )
  {
    // memory allocation failed, panic
    exit( 0 );
  }
  ...
  free( values ); // release the memory when you're done.
}

请注意,在最后一种情况下,values未声明为int的数组,而是指向int的指针;它将存储动态分配的内存地址。您仍然可以使用[]运算符像常规数组一样索引到该空间,但在许多其他方面,它不会被视为与数组相同。

无论您如何创建数组,分配元素都是相同的:

for ( size_t i = 0; i < howMany; i++ )
{
  values[i] = value_for_this_element();
}