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

温馨提示:答案为网友推荐,仅供参考
相似回答