怎么用C语言定义一个无限长的数组?

能不能定义啊?求答案!急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!... 能不能定义啊?求答案!急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 展开
 我来答
风若远去何人留
推荐于2017-09-03 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450135
专业C/C++软件开发

向TA提问 私信TA
展开全部

C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。

比如int a[] = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。

但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。


1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。

通过下面例子来理解该方法:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int size=100;//最初为100个元素空间。
   int *a = NULL;
   int i = 0;
   
   a = malloc(sizeof(int) * size);
   if(a == NULL) return -1;
   while(scanf("%d", a+i) == 1)//循环向a中输入数据,直到输入非数值字符为止
   {
       i++;
       if(i == size)//数组空间不足
       {
           size *=2; //将数组空间扩大二倍, 也可以改用size+=100;之类的操作,使size每次增加固定值。
           a=realloc(a,size);//分配新的空间
           if(a==NULL)
           {
               return -1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
           }
       }
   }
   
   if(a) free(a);//对申请的内存进行释放。
   return 0;
}

从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。

如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。

所以这种方法可以做到软件意义上的无限大数组空间。


但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。


2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。

L_o_o_n_i_e
推荐于2017-09-16 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5264万
展开全部
计算机的内存是有限的,所以不可能定义一个无限长的数组。

我们可以定义动态数组(长度可变),用malloc 动态分配单元,用 realloc 增加和再分配单元。并测定分配是否成功。内存不够使用时就会分配失败。 详细见 malloc,realloc 帮助文件。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魔龙嗜血
2010-05-20 · TA获得超过1116个赞
知道小有建树答主
回答量:1033
采纳率:100%
帮助的人:514万
展开全部
你可以使用动态开辟空间的方法实现,也就是malloc与calloc函数的方法实现。
int *p=(int *)malloc(sizeof (int));
根据需求开辟适当的空间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5252poj
2010-05-20 · 超过24用户采纳过TA的回答
知道答主
回答量:135
采纳率:0%
帮助的人:61.1万
展开全部
定义数组必须规定多大的,确定的,无限大这个不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式