问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-28 12:00

我来回答

4个回答

热心网友 时间:2023-10-30 21:33

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的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。

热心网友 时间:2023-10-30 21:34

计算机的内存是有限的,所以不可能定义一个无限长的数组。

我们可以定义动态数组(长度可变),用malloc 动态分配单元,用 realloc 增加和再分配单元。并测定分配是否成功。内存不够使用时就会分配失败。 详细见 malloc,realloc 帮助文件。

热心网友 时间:2023-10-30 21:34

你可以使用动态开辟空间的方法实现,也就是malloc与calloc函数的方法实现。
int *p=(int *)malloc(sizeof (int));
根据需求开辟适当的空间。

热心网友 时间:2023-10-30 21:35

定义数组必须规定多大的,确定的,无限大这个不行

热心网友 时间:2023-10-08 20:36

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的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。

热心网友 时间:2023-10-08 20:36

计算机的内存是有限的,所以不可能定义一个无限长的数组。

我们可以定义动态数组(长度可变),用malloc 动态分配单元,用 realloc 增加和再分配单元。并测定分配是否成功。内存不够使用时就会分配失败。 详细见 malloc,realloc 帮助文件。

热心网友 时间:2023-10-08 20:36

你可以使用动态开辟空间的方法实现,也就是malloc与calloc函数的方法实现。
int *p=(int *)malloc(sizeof (int));
根据需求开辟适当的空间。

热心网友 时间:2023-10-08 20:37

定义数组必须规定多大的,确定的,无限大这个不行
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
SO2的检验,先将SO2通入溴水,高锰酸钾溶液、品红溶液,有什么现象?除去二 ... 土壤的ph值通常怎样检测? 怎么用ph纸测土壤酸碱值 ph试纸怎么测土壤酸碱度 哪个软件听歌免费 免费听歌软件推荐 音乐播放器哪个好用又免费真正永久免费听歌软件 ...是新手引导界面而不是相应的UG图,必须要在UG软件中才能打开图,这是... 2024浙江大学在职研究生招生方式有哪些? 2025浙大非全日制研究生招生简章汇总 在职研究生非全日制怎么上课的? c语言如何定义二维数组 C语言 定义数组 c语言如何定义字符数组 合伙企业成立的条件具体是什么,规定是什么 设立法人合伙企业需要什么条件? 设立普通合伙企业应当具备哪些条件? 设立合伙企业需要有什么条件 成立合伙企业需要什么条件 设立合伙企业需要具备哪些条件 成立合伙企业都需要哪些条件? 网贷逾期催后,催收人员爆通讯录的行为是否违法? 朋友欠网贷会爆我的通讯录吗? 网贷逾期,会被曝光照片吗?会不会群发通讯录上 我有一张工商的万事达白金卡 我每年是不是要付年费 是多少 工行卡怎么还收年费10元 如何快速添加QQ群里的好友 QQ群里怎么加好友? QQ群怎么样加好友啊 怎么能让QQ群迅速加人? 怎么快速加qq群好友 C语言 定义数组问题 S304000是不是304不锈钢? s30400做饭炒菜安全吗 s30400是什么材质及标准? SUS304和中国的304有什么区别 sa276-s30400是什么材质 sus304就是食品级不锈钢吗? 304不锈钢是食品级不锈钢吗 丈夫出轨了,心里总不能原谅,怎么办? 食品级不锈钢与304不锈钢区别 老公出轨了,我无法原谅怎么办 304不锈钢和食品级不锈钢的区别 老公出轨背叛我,我也从找了个男朋友,可我心里总也放不下他,但我还不想原谅他,我该怎么办 不锈钢中 18/8 是什么标准 ? 梦见孩子高考前捉青蛙是什么预照 老公出轨后该怎么办?你知道吗? 梦到青蛙会说话一个小孩在捉它 13岁小孩梦到青蛙是什么意思 每天坚持早晚喝一杯青汁能减肥吗 成功人士事例英语作文