2015-04-17 95 views
0

我需要创建一个整数数组,以便稍后在程序中逐一使用它们。整数由用户输入,所以数组的大小和每个整数的大小不是恒定的。我可以说,由于程序的规格,阵列不会超过,比方说,100个元素和一个整数总是0和99之间。我怎样才能做到这一点?我是C新手,这对我来说真的很困惑,因为这在Python中很容易实现,并且我花了相当长的一段时间来试图弄清楚如何完成这项工作(我明白,所有数组复杂性源于C是旧语言的事实)。如何在数组大小和整数大小不恒定时创建整数的数组?

+2

谷歌“在C动态数组”。 –

+1

并阅读'realloc()'函数的文档。 –

+0

动态数组的并发症并不是由C作为一种老语言引起的,它们是由C作为一种非常高效的语言引起的! – mfro

回答

1

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

至于阵列本身,你有几个选项可用。

你可以选择你的用户将不会被允许超过元素meximum数:

#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 
    ... 
} 

如果你不想使用沃拉斯(也有一些很好的理由,为什么你不这样做),你可以使用动态内存管理例程:

#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(); 
}