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的数组并进行运算。这样,在运算范围内,这就是一个“无限”的数组。

相关文章

发表新评论