Joel..
6
也许是这样的:
#include
#include
/* An arbitrary starting size.
Should be close to what you expect to use, but not really that important */
#define INIT_ARRAY_SIZE 8
int array_size = INIT_ARRAY_SIZE;
int array_index = 0;
array = malloc(array_size * sizeof(int));
void array_push(int value) {
array[array_index] = value;
array_index++;
if(array_index >= array_size) {
array_size *= 2;
array = realloc(array, array_size * sizeof(int));
}
}
int main(int argc, char *argv[]) {
int shouldBreak = 0;
int val;
while (!shouldBreak) {
scanf("%d", &val);
shouldBreak = (val == 0);
array_push(val);
}
}
这将提示您输入数字并将其存储在数组中,如您所要求的那样.在给定0时传递将终止.
您创建了一个array_push用于添加到数组的访问器函数,realloc当您用完空间时,可以使用此函数调用.每次分配的空间量增加一倍.最多你会分配你需要的双倍内存,最坏的情况下你会调用realloclog n次,其中n是最终的数组大小.
您可能还想在调用malloc和realloc后检查是否有失败.我上面没有这样做过.