c语言如何定义无限长数组
发布时间:2025-05-15 10:35:34 发布人:远客网络
一、c语言如何定义无限长数组
1、C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。
2、比如int a[]={1,2,3,4,5};数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。
3、但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。
4、1由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。
5、intsize=100;//最初为100个元素空间。
6、while(scanf("%d",a+i)==1)//循环向a中输入数据,直到输入非数值字符为止
7、size*=2;//将数组空间扩大二倍,也可以改用size+=100;之类的操作,使size每次增加固定值。
8、a=realloc(a,size);//分配新的空间
9、return-1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
10、if(a)free(a);//对申请的内存进行释放。
11、}
从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。直到占满所有剩余空间。
12、从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。直到占满所有剩余空间。
13、如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。
14、所以这种方法可以做到软件意义上的无限大数组空间。
15、但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。
16、2事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
二、c语言如何实现无限长的数组
1、C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。
2、比如int a[]={1,2,3,4,5};数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。
3、但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。
4、1由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。
5、intsize=100;//最初为100个元素空间。
6、while(scanf("%d",a+i)==1)//循环向a中输入数据,直到输入非数值字符为止
7、size*=2;//将数组空间扩大二倍,也可以改用size+=100;之类的操作,使size每次增加固定值。
8、a=realloc(a,size);//分配新的空间
9、return-1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
10、if(a)free(a);//对申请的内存进行释放。
11、}
从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。直到占满所有剩余空间。
12、从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。直到占满所有剩余空间。
13、如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。
14、所以这种方法可以做到软件意义上的无限大数组空间。
15、但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。
16、2事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
三、C语言 可变长数组
1、我就不看你的bubble sort的算法部分了,直接跟你讲你不知道错误的原因。
2、这里你已经定义n= 1,而a[n]也在该行定义。
3、那么编译器在此就直接给a这个数列分配内存了。
4、也就是说你a这个数组大小就确定了,即为1。
5、我不知道你学了内存分配没有,简单给你讲解一下,
6、比如一个含有5个整数类型的数组可以这样定义a[5],
7、但是也可以这样获得:int*a=(int*) malloc( sizeof( int)* 5);
8、也就是说我们给一个指针分配了内存,从而得到一个数组,
9、而a[5]这样定义也是需要编译器在编译程序的时候分配内存的
10、而编译器会根据你的代码优化你的程序,并把代码转化为汇编再者machine code
11、这个时候由于你在声明数组之前就已经读入n了,
12、所以a这个时候才是根据你输入的数字所得大小的数组。