我需要创建一个整数数组,目的是在程序中逐个使用它们。整数由用户输入,因此数组的大小和每个整数的大小不是恒定的。我可以说,由于程序的规范,阵列不会超过,比如说, 100个元素,整数总是介于0到99之间 。我怎样才能做到这一点?我是C的新手,这对我来说真是令人困惑,因为这在Python中很容易做到,而且我已经花了很长时间才试图弄清楚如何使这项工作(我明白所有这些并发症)数组来自于C是一种古老的语言。
答案 0 :(得分:1)
首先,不要将整数值与用于表示它的类型的大小混淆。在您使用的任何整数类型中,值0
和99
将占用完全相同的空间量。
对于阵列本身,您有几种选择。
您可以选择最多允许用户超过的元素数量:
#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();
}