4

在 C 语言中,有没有办法自动增长数组。例如:

int arr [100] [10];

如果阵列已满,是否可以“自动”变大?或者只有在您使用 C++ 时才有可能。你会怎么用C写这个?

4

2 回答 2

2

C 中没有这样的功能:您必须使用指针声明数组,手动检测“数组已满”条件,调用malloc,将副本复制到扩展数组和free原始数组中。即使是可变长度数组也不起作用,因为它们让您在每个数组生命周期中只设置一次大小。

在 C++ 中,您可以使用std::vector<std::vector<int> >普通数组来代替。您仍然需要检测“数组已满”的情况,但std::vector<T>容器会在调整大小时为您处理所有重新分配和扩展。

于 2012-11-09T18:16:08.227 回答
1

C 中任何数组的“自动”增长是不可能的。如果你静态声明一个数组:

int arr[10];

但是,正如您所指出的,您有许多内存位置。如果您希望能够在运行时更改它,则需要使用动态声明它malloc()并使用使其更大realloc()

给你一个简单的例子:

int main(void){
    int input, count = 0, length = 2;
    int * arr = malloc(sizeof(int) * length); // array of size 2

    while((input = getchar()) != 'q') //get input from the user
    {
        getchar();                    //get rid of newlines
        arr[count] = input;           
        if(count + 1 == length){      // if our array is running out of space
            arr = realloc(arr, length * length);  // make it twice as big as it was
            length *= length;
        }
        count++;
    }

    for(length = 0; length < count; length++)  // print the contents
        printf("%d\n", arr[length]);

    free(arr);

    return 0;
}
于 2012-11-09T18:18:06.083 回答