c语言中数组长度的定义
c语言支持一维数组和多维数组。如果一个数组的所有元素都不是数组,那么这个数组叫做一维数组。
C语言中必须先定义数组,一维数组的定义如下:类型描述符;数组名;C语言如何定义无限数组? c语言支持不用显式定义长度就定义数组,也就是通过初始化数据来分配数组长度。
比如int a[] = {1,2,3,4,5 };数组A的长度没有明确给出。因为有五个初始化数据,所以分配的空间长度是五个int类型。
但是不管怎么定义,数组的长度都是固定的,空间在定义的时候就已经分配好了。从这个角度来看,C语言无法定义无限数组。然而,在许多实际应用中,不可能预先确定数组的长度。对于这种情况,一般有两种方法可以使用。
动态空间由malloc和realloc函数分配,数组的最大长度可以根据需要随时改变。
通过以下实施例理解该方法:
#包含stdio.h
#包含stdlib.h
int main()
{
int size = 100//最初是100个元素空间。
int * a = NULL
int I = 0;
a = malloc(sizeof(int)* size);
if(a == NULL)返回-1;
While(scanf("%d ",a i) == 1)//将数据循环输入到A中,直到输入非数字字符。
{
我;
If(i == size)//数组空间不足。
{
大小* = 2;//数组空间翻倍,或者用size =100代替;诸如之类的操作使大小一次增加一个固定值。
a=realloc(a,size);//分配新空间
if(a==NULL)
{
return-1;//这种情况下,运行载体(如PC)的内存不足以提供,程序中断。
}
}
}
如果(a)自由(a);//释放请求的内存。
返回0;
}
从上面的程序中可以看出,这种方法的原理是每当数组空间不足时,使用函数realloc分配一个新的内存空间来增加数组的长度。直到所有剩余空间都被占用。
如果你占满所有空间后还是保存不了数据,那么硬件是支持不了的。
所以这种方法可以实现软件意义上的无限数组空间。
但是这种方法代码量大,需要频繁分配内存。如果已知数据的最大可能大小,可以使用另一种方法。
2提前知道数据的最大大小,比如统计一个班的成绩时,一个班的学生不超过100人,那么你可以直接定义一个长度为100的数组,或者只是为了保险起见,定义一个长度为1000的数组并进行运算。这样,在运算范围内,这就是一个“无限”的数组。
最后更新于 2023-10-07 11:11:48 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章