C语言新手,非常感谢你的帮助。
是否可以在不指定数组大小或初始化数组的情况下用C语言定义数组?
例如,我是否可以提示用户输入数字并将其存储在int数组中?我不知道他们会预先输入多少个数字。
我现在能想到的唯一方法就是定义一个最大大小,这不是一个理想的解决方案……
发布于 2009-10-20 01:24:23
那么,您可以动态分配大小:
#include <stdio.h>
int main(int argc, char *argv[])
{
int *array;
int cnt;
int i;
/* In the real world, you should do a lot more error checking than this */
printf("enter the amount\n");
scanf("%d", &cnt);
array = malloc(cnt * sizeof(int));
/* do stuff with it */
for(i=0; i < cnt; i++)
array[i] = 10*i;
for(i=0; i < cnt; i++)
printf("array[%d] = %d\n", i, array[i]);
free(array);
return 0;
}发布于 2009-10-20 09:58:44
可能是这样的:
#include <stdio.h>
#include <stdlib.h>
/* 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。每次分配的空间量都会翻倍。至多分配的内存是所需内存的两倍,最坏的情况是调用realloc日志n次,其中n是最终预期的数组大小。
您可能还希望在调用malloc和realloc之后检查故障。我没有做过上面的事情。
发布于 2009-10-20 01:25:23
根据定义,数组是固定大小的内存结构。你想要一个向量。由于标准C语言没有定义向量,你可以尝试寻找一个库,或者自己动手编写。
你需要做动态分配:你想要一个指向未知大小的内存地址的指针。阅读有关malloc和realloc的内容。
https://stackoverflow.com/questions/1591992
复制相似问题