c语言数组长度的函数(c语言如何实现无限长的数组)

本文目录
c语言如何实现无限长的数组
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的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
c语言数组长度函数
比如说是int类型的数组, 数组为 int arr={3,5,6,5,......}
计算数组中元素个数的方法为,求出总数组大小,除以每个元素的大小,就得出元素的个数。
个数= sizeof(arr) / sizeof(int)
注意: 这里的arr单独出现的话代表的是整个数组,不是首地址。
若想让它代表首地址, 用arr+0即可, 比如求首地址的大小, 其实就是指针的大小4,
sizeof(arr+0) 结果肯定是4. 不信你自己cout输出测试下。
同理,无论什么类型的数组,都用这种方法
sizeof(首指针) / sizeof(类型)

更多文章:
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00
怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)
2026年9月7日 06:30





