在 C 语言中,有没有办法自动增长数组。例如:
int arr [100] [10];
如果阵列已满,是否可以“自动”变大?或者只有在您使用 C++ 时才有可能。你会怎么用C写这个?
C 中没有这样的功能:您必须使用指针声明数组,手动检测“数组已满”条件,调用malloc
,将副本复制到扩展数组和free
原始数组中。即使是可变长度数组也不起作用,因为它们让您在每个数组生命周期中只设置一次大小。
在 C++ 中,您可以使用std::vector<std::vector<int> >
普通数组来代替。您仍然需要检测“数组已满”的情况,但std::vector<T>
容器会在调整大小时为您处理所有重新分配和扩展。
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;
}