我现在想定义一个数组,数量未知。然后想一直输入元素,到输入为零的时候就停。有没有能实现的方法!求大神!
两个办法,一个是定义一个大一些的数组。比如int arr[100000],10万个元素,对于计算机来说,也就是400kb的空间,微不足道,但是足够用了,完全可以视作是任意个数输入都够了。
还有就是使用链表,每次动态分配一个空间。
这种方式还是别用数组了,用vector
使用Vector,它的大小可以动态的增加。
用mallo、relloc、free也可以实现
#include <stdlib.h>
#include<stdio.h>
#include<malloc.h>
void main()
{
int *p,count=0,psize=10,n=1;
p=(int *)malloc(psize*sizeof(int));
while(n!=0)
{
scanf("%d",&n);
if(n==0)break;
p[count++]=n;
if(count>=psize)
{
psize+=10;
p=(int*)realloc(p,psize*sizeof(int));//重新分配内存,增加10个int空间,并复制原有数据
}
}
for(int i=0;i<count;i++)
printf("%d ",p[i]);
free(p);
}
ysuwood的方法比较合适。只是有一点或许可以改进:每次重新分配空间时,检查新分配得到的指针是否与原来p相同,若不同则应该将原来的空间释放再为指针p重新赋值。这样可以避免内存泄露。
就用stl里面的vector 或者 list把,他们都具有高效率,并且自动扩容 ...